Web API 2 - 现在允许(405)PUT的方法

时间:2016-06-20 08:04:39

标签: c# asp.net webapi2

我遇到了Web API 2控制器,我从中调用了PUT方法,它给了我一个不允许该方法的错误。我在Web.config中添加了一行代码,阻止WebDAV阻止方法。我尝试了一切,但它没有用。在控制器中我的PUT方法可能存在问题。

这是我的控制器代码:

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

这是我调用put的代码:

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

在此代码之前我将客户端定义为http并添加了所需的属性,并调用了其他控制器方法(GET,POST,DELETE),它们都可以工作。这是来自Windows Form应用程序,我也是从Postman调用但仍然是同样的错误。

2 个答案:

答案 0 :(得分: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);
 }
}

编辑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);

答案 1 :(得分:1)

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