如何让IIS 能响应HTTP PUT和DELETE请求

jinxuliang2 发表于   2016/1/5 15:11:53,阅读次数: 2065

默认情况下,IIS不支持HTTP PUT和DELETE,本文介绍如何解决这个问题

当前,REST风格的Web Server大行于世,使用ASP.NET Web API可以很方便地开发这样的程序:

 


                         

[Route("RESTTest/api/[controller]")]
    public class ValuesController : Controller
    {
        // GET: RESTTest/api/values
  [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
  [HttpGet("{id}")]
        public string Get(int id)
        {
            return "value";
        }

        // POST api/values
    [HttpPost]
        public JsonResult Post([FromBody]string value)
        {
            return Json("Post");
        }

        // PUT api/values/5
  [HttpPut("{id}")]
        public JsonResult Put(int id, [FromBody]string value)
        {
            return Json("Put");
        }

        // DELETE api/values/5
  [HttpDelete("{id}")]
        public JsonResult Delete(int id)
        {
            return Json("Delete");
        }
    }

当我们把这样的一个程序部署到IIS上之后,你会发现GET和POST请求没问题,但当客户端发出PUT或DELETE请求时,会发现以下的现象:

其原因在于默认情况下,IIS会安装一个WebDav模块,而此模块阻止了HTTP PUT和DELETE请求。

(参看 http://www.asp.net/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications

因此,解决方法很简单,在部署了Web API的网站中,移除掉WebDav模块即可。

如上图所示,在包容了Web API REST Service的Web Application中,打开“模块”选项卡,选中“WebDAVModule”,在右击点击“删除”。

删除之后,再次访问网站,可以看到工作正常。

如果IIS对PUT和DELETE请求报告500错误 ,可以试试修改web.config,移除WebDAVModule:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
   <remove name="WebDAVModule"/>
  </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>


附件清单



评论于: