简体   繁体   中英

Web API 2 - Method now allowed(405) for PUT

I am stuck with Web API 2 controller, from which I call PUT method and it gives me an error that method isn't allowed. I added lines of code in Web.config that prevent WebDAV to block methods. I tried everything but it is not working. It is probably problem with my PUT method in a controller.

Here is my controller code:

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

This is a code from where I call put :

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

before this code I defined client as http and added needed properties, and called other controller methods (GET, POST, DELETE) , they all work. This is from Windows Form app, and I am also calling from Postman but still the same error.

Add [HttpPut] , [RoutePrefix("api/yourcontroller")] and [Route("put")] attribute to your controller method

Example:

[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);
 }
}

From your HttpRequest call It seems what is expected is a HttpResponseMessage So changed the return type to async Task<HttpResponseMessage>

Code for making HttpRequest:

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

[System.Web.Http.HttpPut]属性添加到您的方法。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM