Почему я получаю 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?
Ответы
Ответ 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;
}
Попробуйте, теперь все будет работать гладко