2016-06-20 2 views
0

Я застрял с контроллером Web API 2, из которого я вызываю метод PUT, и это дает мне ошибку, что метод не разрешен. Я добавил строки кода в Web.config, которые не позволяют WebDAV блокировать методы. Я пробовал все, но он не работает. Вероятно, это проблема с моим методом PUT в контроллере.Web API 2 - теперь разрешен метод (405) для PUT

Вот мой код контроллера:

public IHttpActionResult Put(int id, [FromBody]ArticleModel model) { 
    var article = _articleService.UpdateArticle(model); 
    return Ok<ArticleModel>(article); 
} 

Это код, где я называю поставил:

response = await client.PutAsJsonAsync("api/article/2", articleModel); 

до этого кода я определила клиента как HTTP и добавлены необходимые свойства, и призвал другие (GET, POST, DELETE), все они работают. Это из приложения Windows Form, и я также звоню из Postman, но по-прежнему те же ошибки.

+0

Я думаю, вы просто перепутали '' Post' и Put'. Вы действительно можете использовать одно и то же действие для обоих глаголов, но я лично считаю, что это не очень хорошая практика в веб-приложении (Post для создания нового объекта, Put должен использоваться для его обновления). Однако вы можете использовать оба глагола для доступа к действию. Например, есть [эта ссылка] (https://www.exceptionnotfound.net/using-http-methods-correctly-in-asp-net-web-api/). – Carsten

+0

It's Put, я сделал typo .. :( –

+0

Как вы создаете свой запрос 'PUT'? Через пользовательский клиент? Через веб-страницу? Через инструмент dev, такой как Postman/Fiddler? –

ответ

2

Добавить [HttpPut], [RoutePrefix("api/yourcontroller")] и [Route("put")] атрибут вашего метода контроллера

Пример:

[RoutePrefix("api/yourcontroller")] 
public class YourController 
{ 
[HttpPut] 
[Route("{id}/put")] 
public IHttpActionResult Put(int id, [FromBody]ArticleModel model) { 
    var article = _articleService.UpdateArticle(model); 
    return Ok<ArticleModel>(article); 
} 
} 

EDIT 1

public class YourController 
{ 
[HttpPut] 
[Route("api/article/{id}/put")] 
public async Task<HttpResponseMessage> Put(int id, [FromBody]ArticleModel model) { 
    var article = _articleService.UpdateArticle(model); 
    return Ok<ArticleModel>(article); 
} 
} 

От Вашего HttpRequest называют кажется, что, как ожидается, является HttpResponseMessage Так изменил тип возврата на async Task<HttpResponseMessage>

Код для изготовления HttpRequest:

response = await client.PutAsJsonAsync("api/article/2/put", articleModel); 
+0

По-прежнему такая же ошибка –

+1

Пожалуйста, добавьте код, из которого вы делаете запрос, в вопрос – Pushpendra

+0

Вот код, который я обновил. Основное сообщение –

Смежные вопросы