Asp.net-Web-Api

通過 Web.config 與 WebApiConfig 和 Controller 屬性啟用 CORS

  • April 30, 2015

在 Web API 2 中啟用跨域請求共享似乎有兩種功能不同的方法。

一種是導入System.Web.Http.Cors,使用屬性裝飾控制器EnableCors並寫入config.EnableCors()WebApiConfig:

[EnableCors(origins: "http://111.111.111.111", headers: "*", methods: "*")]
public class GenericController : ApiController
{
   // etc.

另一種是修改 Web.config

<system.webServer>
    <httpProtocol>
        <customHeaders>
           <add name="Access-Control-Allow-Origin" value="http://111.111.111.111" />
           <add name="Access-Control-Allow-Methods" value="*" />
           <add name="Access-Control-Allow-Headers" value="*" />

這兩種不同的方法之間是否存在功能差異?哪一個是正確的——這些不是完成同樣的事情嗎?如果這兩種方法都用於啟用 CORS,事情會爆炸嗎?

如果將標頭添加到 web.config,則該應用程序提供的每個請求都將包含指定的標頭。此方法在 Web 伺服器級別受支持,並且不依賴於config.EnableCors()執行。您可以使用該方法添加所需的任何 HTTP 標頭。

另一方面,該EnableCors屬性需要 WebAPI,您需要添加一些程式碼才能使其工作。對於最終使用者來說,結果是一樣的。

至於哪種方式更好?我喜歡通過使用屬性將這些設置保留在應用程式碼中,因此這些設置對未來的開發人員來說是顯而易見的。根據您的需要,您可能希望查看一個抽象CorsApiController,您的主要 ApiController 可以繼承該抽像以一遍又一遍地傳遞相同的 CORS 標頭。但是,如果 CORS 標頭需要因控制器或操作而異,則此方法將不起作用。

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