幫助中心
技術(shù)運維百科
iis開啟options請求 關(guān)于Web API 2.0中的Options請求返回405的問題
2017-07-11 14:46:07

前提:IIS寄宿的網(wǎng)站

當(dāng)你向服務(wù)器發(fā)送非簡單請求時,客戶端會先發(fā)送一條預(yù)檢請求,借以確認(rèn)當(dāng)前請求源和待請求方法是否被網(wǎng)站允許。(關(guān)于這種Http請求的詳細信息,請在道友的文章中學(xué)習(xí))

道友的文章寫的很好,其提供的解決方案是使用一個微軟公司提供的官方DLL。為了不被DLL蒙在鼓里,本文提供了另外一種解決思路。

當(dāng)客戶端向服務(wù)器發(fā)送Options請求時,Web API 2.0默認(rèn)會吃掉它并返回405以表示該操作不被支持。究竟是IIS管線中的哪個步驟吃掉了它,我沒有研究明白。不過可以確定的是,問題出在Modulers里。在Web.config文件中,system.webServer下有個modules節(jié)點,如果將它的runAllManagedModulesForAllRequests屬性設(shè)置為True,也可以解決options 405問題。這個屬性默認(rèn)是false,所以本文也不推薦這種方法。

Modules和Handler都是可以編程介入的,這個靈活性為我們提供了解決問題的渠道。具體步驟如下: (1)在App_Code文件夾下新建一個.cs文件,自定義一個類,并實現(xiàn)IHttpModule接口 (2)在Init方法中,為HttpApplication的BeginRequest事件添加一個自定義過程。 (3)在自定義過程中,攔截請求,判斷Request的HttpMethod屬性是否是options。如果是,就將響應(yīng)的狀態(tài)碼設(shè)置為200,然后截斷后續(xù)處理,直接響應(yīng)請求。 (4)在Web.config文件中添加自定義模塊。

以下是自定義模塊程序示例:

"language-C# hljs cs"> public class SpecialMethodModule : IHttpModule
{
public SpecialMethodModule() { }
public void Init(HttpApplication app)
{
app.BeginRequest += new EventHandler(this.BeginRequest);
}
public void Dispose() { }
新客優(yōu)惠
特價 酷睿i3系列
性價比熱銷推薦,年銷量第一
1180/月起
USA-IDC為您提供免備案服務(wù)器 0元試用
立即聯(lián)系在線客服,即可申請免費產(chǎn)品試用服務(wù)