我想在使用 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>
Action 方法用
AcceptVerbs("PATCH")
修饰。属性。该服务与 PATCH 动词一起正常工作。 URL 被路由到正确的操作方法并返回正确的数据。
奇怪的问题是,如果我使用不匹配任何使用 PATCH 动词的路由的不同 URL,IIS 返回“200 OK”而不是“404 Not Found”。所有标准动词(GET、PUT、DELETE、POST、HEAD、OPTIONS)都没有这个问题。
我需要为 PATCH 动词注册额外的处理程序还是路由问题?任何帮助表示赞赏。
最佳答案
您实际上不需要自定义处理程序来处理使用 PATCH 动词发出的 HTTP 请求;相反,您可能希望继续使用 AcceptVerbs("PATCH")
来装饰您的操作。属性,同时检查 ASP.NET ISAPI 是否配置为处理任何动词(这是默认设置),包括 PATCH。
如果您必须使用自定义模块处理此类请求,请记住,处理程序本身有责任为每个请求设置状态代码(包括它应该处理的那些,根据映射,但它不能出于任何原因),也许它在完成时没有设置正确的值。
关于asp.net-mvc-3 - 在 IIS 7/7.5 中注册 PATCH HTTP 动词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773109/