Web API 2 - PUT 方法不允许 (405)
Web API 2 - Method now allowed(405) for PUT
我被 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 调用的,但仍然是同样的错误。
将 [System.Web.Http.HttpPut]
属性添加到您的方法。
将 [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
所以将 return 类型更改为 async Task<HttpResponseMessage>
生成HttpRequest的代码:
response = await client.PutAsJsonAsync("api/article/2/put", articleModel);
我被 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 调用的,但仍然是同样的错误。
将 [System.Web.Http.HttpPut]
属性添加到您的方法。
将 [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
所以将 return 类型更改为 async Task<HttpResponseMessage>
生成HttpRequest的代码:
response = await client.PutAsJsonAsync("api/article/2/put", articleModel);