[RoutePrefix("ServiceRequest")]
public class ServiceRequestController : ApiController
{
[HttpPost]
[Route("")]
public IHttpActionResult Post([FromBody]ServiceRequest.Models.ServiceRequest serviceRequest)
{
return Ok();
}
}
Я использую пустой Route()
для POST
в WebAPI
и WebAPI
' http://localhost.com:59985/ServiceRequest/
Это вызывает ошибку, указывающую HTTP Error 405.0 - Method Not Allowed
и, скорее всего, приведенные причины были
В запросе, отправленном на веб-сервер, использовался HTTP-глагол, который не разрешен модулем, настроенным для обработки запроса
(или)
Запрос был отправлен на сервер, содержащий неверный HTTP-глагол
(или)
Запрос предназначен для статического содержимого и содержит HTTP-глагол, отличный от GET или HEAD
(или)
Запрос был отправлен в виртуальный каталог, используя HTTP-протокол POST, а документ по умолчанию - это статический файл, который не поддерживает HTTP-глаголы, отличные от GET или HEAD.
Однако, если вы используете Route ("Test"), метод just works fine
как показано ниже:
[POST] на http://localhost.com:59985/ServiceRequest/Test - работает нормально. (Route is [Route("Test")])
[POST] на http://localhost.com:59985/ServiceRequest ------- не работает (Route is [Route("")]
Пуст Route
не разрешен для POST? Какие-нибудь идеи, что здесь не так?
Оказывается, это проблема, потому что [RoutePrefix("ServiceRequest")]
имеет то же имя, что и имя контроллера.
Когда я изменил [RoutePrefix()]
все работало нормально, как и раньше.
[RoutePrefix()]
на? У него нет публичного пустого конструктора.
[RoutePrefix]
добавляет префикс к вашим маршрутам. Итак, в вашем примере, если вы не укажете [RoutePrefix]
, то по соглашению ваш маршрут будет:
.../api/ServiceRequest
Добавляя [RoutePrefix]
вы говорите, что маршруты в этом контроллере будут иметь префикс по указанному маршруту, то есть вы фактически меняете свой маршрут на:
.../api/ServiceRequest/ServiceRequest
Может ли это быть причиной вашей проблемы? Я не уверен, что у RoutePrefix
с тем же именем, что и контроллер, была проблема, но я мог ошибаться - я все еще довольно новичок в этом.
attribute routing
, вам не нужно использовать ../api/..
вообще. Он заменяет их и определяет новый маршрут внутри