Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不支持asp.net web api PUT方法_Asp.net_Asp.net Web Api_Iis Express - Fatal编程技术网

不支持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是默认启用的,所以很抱歉打扰您。