Asp.net

asp.net web api 控制器中不允許使用 405 方法選項?

  • April 17, 2017

我有一個非常常見的問題,它說方法不允許(OPTIONSGET請求。每當我進行 API 呼叫時,都會收到以下錯誤。我有這個設置web.config

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

我嘗試對所有原始標頭和方法Asp.Net.WebApi.Cors全域使用和強制執行 CORS EnableCors(),但這也不起作用。

在你handlers之後&lt;remove name="OPTIONSVerbHandler"/&gt;,添加這個:

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

請參閱IIS hijacks CORS Preflight OPTIONS request中的答案。

或者甚至可能只是這樣:

&lt;add name="OPTIONSVerbHandler" path="*" verb="OPTIONS"
  modules="ProtocolSupportModule" requireAccess="None" /&gt;

如果這不起作用,那麼將在您的 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();
   }
}

引用自:https://stackoverflow.com/questions/43459226