Подтвердить что ты не робот

Почему я получаю 404 ответ от моего POST в web api

В моем контроллере Web api есть следующее действие:

 // POST api/<controller>
    [AllowAnonymous]
    [HttpPost]
    public bool Post(string user, string password)
    {
         return true; 
    }

Я получаю следующую ошибку при статусе 404 при ударе с помощью скрипача или теста jQuery script:

{ "Сообщение": "HTTP-ресурс не найден, который соответствует URI запроса" http://localhost/amsi-v8.0.0/api/account ".," MessageDetail ":" Никаких действий не найдено на Контроллер "Учетная запись", которая соответствует запросу. "}

Мой http-маршрут выглядит следующим образом:

            RouteTable.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

Получает хорошую работу. Я нашел здесь еще один вопрос, который говорит об удалении WebDAV из IIS. Я пробовал это, все тот же вопрос.

Почему я получаю 404?

4b9b3361

Ответ 1

Поведение действия по умолчанию в ASP.NET Web API также касается параметров вашего метода действий. Если они являются объектами простого типа, и они не являются необязательными, вам необходимо будет предоставить их для вызова этого конкретного метода действий. В вашем случае вы должны отправить запрос против URI, как показано ниже:

/апи/учетная запись пользователя = Foo &? = Пароль бар

Если вы хотите получить эти значения внутри тела запроса, а не строку запроса (что является лучшей идеей), просто создайте объект User и отправьте запрос соответственно:

public class User { 
    public string Name {get;set;}
    public string Password {get;set;}
}

Запрос:

POST http://localhost: 8181/api/account HTTP/1.1

Content-Type: application/json

Хост: localhost: 8181

Content-Length: 33

{ "Name": "foo", "Password": "bar" }

И ваш метод действия должен выглядеть следующим образом:

public HttpResponseMessage Post(User user) {

    //do what u need to do here

    //return back the proper response.
    //e.g: If you have created something, return back 201

    return new HttpResponseMessage(HttpStatusCode.Created);
}

Ответ 2

Когда мы отправляем json, он ожидает класс, поэтому создайте класс в папке модели, подобной этой

public class Credential
{
    public string username { get; set; }
    public string password { get;set; }
}

и теперь измените параметр

[HttpPost]
public bool Post(Credential credential)
{
     return true; 
}

Попробуйте, теперь все будет работать гладко