2017-04-17 31 views
2

我有這個非常普遍的問題,它說方法不允許(OPTIONSGET請求。每當我進行API調用時,都會收到以下錯誤。我有這樣的設置在web.config在asp.net web api控制器中不允許使用405方法選項?

<system.webServer> 
    <modules> 
    <remove name="WebDAVModule"/> 
    </modules> 
    <httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*"/> 
     <add name="Access-Control-Allow-Headers" value="Origin, Authorization, X-Requested-With, Content-Type, Accept"/> 
     <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS"/> 
    </customHeaders> 
    </httpProtocol> 
    <handlers> 
    <remove name="WebDAV"/> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0"/> 
    <remove name="OPTIONSVerbHandler"/> 
    <remove name="TRACEVerbHandler"/> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/> 
    </handlers> 
</system.webServer> 

我嘗試使用Asp.Net.WebApi.Cors和執行CORS全球使用EnableCors()所有起源頭和方法,這也不能工作。

+0

什麼版本的IIS是你使用? – mason

+0

@mason:iis 10.0 express – user1505521

回答

4

在你handlers<remove name="OPTIONSVerbHandler"/>後,補充一點:

<add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" 
    modules="IsapiModule" requireAccess="None" 
    scriptProcessor="C:\Windows\System32\inetsrv\asp.dll" 
    resourceType="Unspecified" /> 

一看便知在IIS hijacks CORS Preflight OPTIONS request

,或者甚至只是這樣的:

<add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" 
    modules="ProtocolSupportModule" requireAccess="None" /> 

如果還是不行,這東西會被添加在下面的global.asax或其他代碼:

protected void Application_BeginRequest(object sender,EventArgs e) 
{ 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 
    if(HttpContext.Current.Request.HttpMethod == "OPTIONS") 
    { 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); 
     HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
     HttpContext.Current.Response.End(); 
    } 
} 
+0

嘗試第一和第二次沒有工作.. 第三個工作,但因爲我們沒有使用Global.asax pipelinng api在啓動期間配置...我沒有使用該方法..所以通過定義一個自定義的Mesagehandler,我發現了相同的方法解決方案,只要我異步獲得預檢請求,就會發送響應OK。由於這個想法是相同的,我會給它一個答案.. – user1505521