0

我被 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 窗体应用程序,我也从 Postman 调用,但仍然是同样的错误。

4

2 回答 2

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 调用看来,预期的是 aHttpResponseMessage所以将返回类型更改为async Task<HttpResponseMessage>

制作HttpRequest的代码:

response = await client.PutAsJsonAsync("api/article/2/put", articleModel);
于 2016-06-20T08:08:11.210 回答
1

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

于 2016-06-20T08:06:10.973 回答