不支持asp.net web api PUT方法
我正在向不支持asp.net web api PUT方法,asp.net,asp.net-web-api,iis-express,Asp.net,Asp.net Web Api,Iis Express,我正在向PersonController发出PUT请求,但它甚至没有到达控制器。相反,我从服务器得到以下响应 {"message":"The requested resource does not support http method 'PUT'."} 但是get请求get/api/person得到了正确的服务 这是个人控制器 public class PersonController : ApiController { // GET: api/Person/5 [Respo
PersonController
发出PUT请求,但它甚至没有到达控制器。相反,我从服务器得到以下响应
{"message":"The requested resource does not support http method 'PUT'."}
但是get请求get/api/person
得到了正确的服务
这是个人控制器
public class PersonController : ApiController
{
// GET: api/Person/5
[ResponseType(typeof(Person))]
public IHttpActionResult GetPerson(int id) {
//Served without any issues
}
// PUT: api/Person/5
[ResponseType(typeof(void))]
public IHttpActionResult PutPerson(int id, Person person) {
//Not reaching here!
}
}
这是如fiddler中所示的PUT请求
PUT http://localhost:xxxxx/api/person HTTP/1.1
Host: localhost:xxxxx
Connection: keep-alive
Content-Length: 38
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://localhost:xxxxx
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36
Content-Type: application/json
DNT: 1
Referer: http://localhost:xxxxx/index.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,ms;q=0.6
{"id":0,"name":"Person 11","age":"11"}
以及服务器响应
HTTP/1.1 405 Method Not Allowed
Cache-Control: no-cache
Pragma: no-cache
Allow: GET,POST
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcWGFuYWR1XFZTX1Byb2plY3RzXEJhY2tib25lSlNfUmVzdENhbGxzXEJhY2tib25lSlNfUmVzdENhbGxzLldlYlxhcGlccGVyc29u?=
X-Powered-By: ASP.NET
Date: Sat, 16 Aug 2014 09:20:46 GMT
Content-Length: 72
{"message":"The requested resource does not support http method 'PUT'."}
显然,该PUT请求被IIS Express拒绝。配置IIS Express(VS 2013)以允许在项目级别放置和删除请求的正确方法是什么。首先,为什么不在ApiController操作中返回模型本身?另一方面,我认为您应该搜索“Web API启用PUT动词”,这应该足以找到修复程序……我记得iis express开箱即用不支持get和post以外的动词。您必须编辑一些设置文件才能打开这些谓词。谷歌搜索。@StephenChung实际上完整的IIS没有内置的配置设置。而是将它们添加到web.config中。从WebAPI2 VS project template开始,它创建/添加所需的HTTP模块条目到web.config以启用所有谓词。我不记得它在web.config中。它位于某些iis设置文件中。只有快速版本是这样的。完整版本未被阻止。@MatíasFidemraizer,StephenChung我已经尝试解决这个问题一段时间了,我尝试了在google和这个论坛上可以找到的所有选项。这个问题原来很愚蠢。我一直在发出请求,如PUT localhost:xxxxx/api/person,但没有id。但是,如果我发出请求,如PUT localhost:xxxxx/api/person/11,则请求会正确映射到PUT操作方法。我只是在探索Web API,我为API控制器发布的代码是由Visual Studio生成的。无论如何,看起来PUT是默认启用的,所以很抱歉打扰您。