前提:IIS寄宿的網(wǎng)站
當你向服務器發(fā)送非簡單請求時,客戶端會先發(fā)送一條預檢請求,借以確認當前請求源和待請求方法是否被網(wǎng)站允許。(關于這種Http請求的詳細信息,請在道友的文章中學習)
道友的文章寫的很好,其提供的解決方案是使用一個微軟公司提供的官方DLL。為了不被DLL蒙在鼓里,本文提供了另外一種解決思路。
當客戶端向服務器發(fā)送Options請求時,Web API 2.0默認會吃掉它并返回405以表示該操作不被支持。究竟是IIS管線中的哪個步驟吃掉了它,我沒有研究明白。不過可以確定的是,問題出在Modulers里。在Web.config文件中,system.webServer下有個modules節(jié)點,如果將它的runAllManagedModulesForAllRequests屬性設置為True,也可以解決options 405問題。這個屬性默認是false,所以本文也不推薦這種方法。
Modules和Handler都是可以編程介入的,這個靈活性為我們提供了解決問題的渠道。具體步驟如下: (1)在App_Code文件夾下新建一個.cs文件,自定義一個類,并實現(xiàn)IHttpModule接口 (2)在Init方法中,為HttpApplication的BeginRequest事件添加一個自定義過程。 (3)在自定義過程中,攔截請求,判斷Request的HttpMethod屬性是否是options。如果是,就將響應的狀態(tài)碼設置為200,然后截斷后續(xù)處理,直接響應請求。 (4)在Web.config文件中添加自定義模塊。
以下是自定義模塊程序示例:
"language-C# hljs cs"> public class SpecialMethodModule : IHttpModule