在IIS 7/7.5中注册PATCH HTTP谓词

Dmi*_* S. 5 rest iis-7 asp.net-mvc-3

我想在用ASP MVC 3实现的RESTful服务中实现最近批准的PATCH HTTP谓词.我在web.config文件中添加了以下设置.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="PATCHVerbHandler" path="*" verb="PATCH" modules="ProtocolSupportModule" requireAccess="None" /> 
        </handlers>
        <security>
            <requestFiltering>
                <verbs>
                    <add verb="PATCH" allowed="true" />
                </verbs>
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

动作方法用AcceptVerbs("PATCH")属性修饰.

该服务与PATCH动词一起正常工作.URL被路由到正确的操作方法并返回正确的数据.

奇怪的问题是,如果我使用与使用PATCH谓词的任何路由都不匹配的其他URL,IIS将返回"200 OK"而不是"404 Not Found".所有标准动词(GET,PUT,DELETE,POST,HEAD,OPTIONS)都没有这个问题.

我是否需要为PATCH动词注册其他处理程序,还是路由问题?任何帮助表示赞赏.

Efr*_*isi 6

并不真的需要一个自定义的处理程序处理与PATCH动词的HTTP请求; 相反,您可能希望继续使用该AcceptVerbs("PATCH")属性修饰您的操作,同时检查ASP.NET ISAPI是否配置为处理任何动词(它是默认设置),包括PATCH.

如果你必须使用自定义模块处理这种请求,顺便说一下,请记住,处理程序本身有责任为每个请求设置状态代码(包括它应该处理的请求,根据映射,但它不能出于任何原因)并且可能在完成时没有设置正确的值.