How to: Handle CORS Preflight Requests in Web API 2

  • 129
  • 0
  • 2016-03-02

摘要:How to: Handle CORS Preflight Requests in Web API 2

最近在寫 Web API 碰到了 CORS Preflight Request 的問題, 

關於 CORS 可以參考這篇文章 HTTP access control (CORS) 

終於找到其實在 Web API 2 中, 可以直接在 Controller 中處理 Options, 程式碼如下: 

public class YourController : ApiController
{
    public HttpResponseMessage Options()
    {
        HttpContext.Current.Response.Headers.
                    Set("Access-Control-Allow-Origin", "http://another.doamin");
        HttpContext.Current.Response.Headers.
                    Set("Access-Control-Allow-Methods", "GET, PUT, POST");
        return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
    }
}

至於為什麼可以直接這樣寫呢? 原來在 Web API 專案建立時, 微軟偷偷地幫我們做了些事。

<handlers>
    <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>