前提:IIS寄宿的网站
当你向服务器发送非简单请求时,客户端会先发送一条预检请求,借以确认当前请求源和待请求方法是否被网站允许。(关于这种Http请求的详细信息,请在道友的文章中学习)
道友的文章写的很好,其提供的解决方案是使用一个微软公司提供的官方DLL。为了不被DLL蒙在鼓里,本文提供了另外一种解决思路。
当客户端向服务器发送Options请求时,Web API 2.0默认会吃掉它并返回405以表示该操作不被支持。究竟是IIS管线中的哪个步骤吃掉了它,我没有研究明白。不过可以确定的是,问题出在Modulers里。在Web.config文件中,system.webServer下有个modules节点,如果将它的runAllManagedModulesForAllRequests属性设置为True,也可以解决options 405问题。这个属性默认是false,所以本文也不推荐这种方法。
Modules和Handler都是可以编程介入的,这个灵活性为我们提供了解决问题的渠道。具体步骤如下: (1)在App_Code文件夹下新建一个.cs文件,自定义一个类,并实现IHttpModule接口 (2)在Init方法中,为HttpApplication的BeginRequest事件添加一个自定义过程。 (3)在自定义过程中,拦截请求,判断Request的HttpMethod属性是否是options。如果是,就将响应的状态码设置为200,然后截断后续处理,直接响应请求。 (4)在Web.config文件中添加自定义模块。
以下是自定义模块程序示例:
"language-C# hljs cs"> public class SpecialMethodModule : IHttpModule