Wep Api - метод 405 не допускается
У меня есть проект Web Api с контроллером, который имеет методы для GET, DELETE, POST и PUT.
Когда я пытаюсь выполнить POST или PUT для этого контроллера, я всегда получаю ошибку 405 Method Not Allowed. Передаваемые данные выглядят корректно, это просто объект с шестью простыми свойствами. Я установил точку останова в моем методе, и, как и ожидалось, в этом случае он не был достигнут. Я зарегистрировал DelegatingHandler (упомянутый в Web Api - метод Catch 405 Not Allowed) для проверки входящего запроса и исходящего ответа, и я могу сказать, что мой запрос обрабатывается Api (то есть проблема не с клиентом). Я также использовал Fiddler для проверки запроса / ответа, а заголовки ответа говорят в разделе Безопасность, Разрешить: УДАЛИТЬ, ПОЛУЧИТЬ.
Это ясно говорит мне, что PUT и POST недопустимы по какой-либо причине, хотя у меня есть методы, украшенные атрибутами [HttpPost] и [HttpPut], и, насколько я могу судить, правильно настроили маршрутизацию. Я использую маршрутизацию по умолчанию, но также есть методы, которые используют атрибутную маршрутизацию.
Это звучит так, как будто может быть какая-то проблема безопасности, однако я могу выполнить POST и PUT на других своих контроллерах и не вижу различий, которые, как я считаю, могут быть причиной проблемы.
Вот фрагмент моего кода:
public class PricesController : ApiController
{
// DELETE: api/Prices/5
[HttpDelete]
[ResponseType(typeof(Price))]
[Route("api/Prices/{id:int}")]
public async Task<IHttpActionResult> DeletePrice(int id)
{
// code omitted
}
// GET: api/Prices/5
[HttpGet]
[ResponseType(typeof(Price))]
[Route("api/Prices/{id:int}")]
public async Task<IHttpActionResult> GetPrice(int id)
{
// code omitted
}
// GET: api/Prices
[HttpGet]
[Route("api/Prices")]
public IQueryable<Price> GetPrices()
{
// code omitted
}
// POST: api/Prices
[HttpPost]
[ResponseType(typeof(Price))]
[Route("api/Prices", Name = "Prices")]
public async Task<IHttpActionResult> PostPrice(Price price)
{
// code omitted
}
// PUT: api/Prices/5
[HttpPut]
[ResponseType(typeof(void))]
[Route("api/Prices/{id:int}")]
public async Task<IHttpActionResult> PutPrice(int id, Price price)
{
// code omitted
}
}
Любая помощь будет оценена. Я провел весь день, пытаясь понять это.
1 ответ
Похоже, что это не обязательно правильно.
Можете ли вы попробовать украсить Price с помощью [FromBody] перед этим в ваших действиях?
PostPrice([FromBody] Price price)