码迷,mamicode.com
首页 > Windows程序 > 详细

ASP.Net WebAPI HttpDelete/PUT方法运行或发布到生产服务器上后出现405(Method Not Allowed)错误的解决办法

时间:2019-02-02 10:19:56      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:重新定义   pos   内容   src   conf   edit   eve   runtime   服务   

原文:ASP.Net WebAPI HttpDelete/PUT方法运行或发布到生产服务器上后出现405(Method Not Allowed)错误的解决办法

本文只是个人的理解和学习记录,如果觉得本文写的业余或者表达不清楚,可以直接去参考这里。? ??

最近在写ASP.NET的WebAPI,但是在使用HttpDelete方法的时候,总是碰到405的错误,也就是Method?Not?Allowed。

实际上接口方法前面加上了正确的HttpDelete谓词,现在依然提示405。想看解决方案可以直接跳到最后。

据(上述链接里的)msdn大牛介绍,一般而言,在运行WebAPI的接口方法前,IIS会根据接口的方法类型/谓词(HttpPost、HttpGet、HttpPut、HttpDelete)从安装目录的配置文件applicationHost.config中(一般为C:\Program Files (x86)\IIS Express\config\templates\PersonalWebServer)匹配符合该类谓词定义的handler然后采用这个handler执行相应的操作;但是applicationHost.config文件里有一个handler,叫WebDAV,WebDAV定义了与ExtensionlessUrlHandler(用于处理WebAPI的handler)类似的HTTP谓词集合。二者产生了冲突,而IIS优先调用了WebDAV?handler(初步分析,是因为WebDAV的定义在ExtensionlessUrlHandler之前,所以首先匹配到了WebDAV),可能具体的问题场景不尽相同,这是导致生产服务器报405的一种原因。

我们通过applicationHost.config里面关于WebDAV的定义可以看到,

技术图片

WebDAV也定义了Detete谓词,但WebDAV并非处理WebAPI的handler;

而真正用于处理WebAPI的handler,大家可以看下,在整个配置文件的最后,

技术图片

而且,我们发现,ExtensionlessUrlHandler默认并没有支持Delete谓词,所以就导致了上述405的错误。

我们在项目的web.config下添加这样一个handler,具体内容为

<add    name="ExtensionlessUrlHandler-Integrated-4.0" 
        path="*." 
        verb="*" 
        type="System.Web.Handlers.TransferRequestHandler"
        preCondition="integratedMode,runtimeVersionv4.0" 
/>

技术图片

这使得WebAPI方法支持HttpDelete谓词,但根据前面msdn大牛的建议,最好还是先将可能出现匹配冲突的WebDAV去掉防止生产服务器上运行出错,具体方法可以参看上图handler节点与modules节点中的remove子节点的写法

总结一下:

step1、在<system.webServer>? ? <handlers>节点下增加一行去掉WebDAV的命令

<remove name="WebDAV" />

step2、在modules节点下增加一行命令去掉WebDAVModule的命令

<remove name="WebDAVModule" />

step3、重新定义WebAPI相关的handler;对于WebAPI,此行由框架自动添加

<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

?

到此,ASP.Net WebAPI 运行或发布到生产服务器上后出现405(Method Not Allowed)错误的来龙去脉以及解决办法就比较清楚了。希望能帮助到大家。

?

ASP.Net WebAPI HttpDelete/PUT方法运行或发布到生产服务器上后出现405(Method Not Allowed)错误的解决办法

标签:重新定义   pos   内容   src   conf   edit   eve   runtime   服务   

原文地址:https://www.cnblogs.com/lonelyxmas/p/10347511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!