如何在C# ASP.NET WebAPI中解決CORS問題?


跨域資源共享 (CORS) 是一種機制,它使用額外的HTTP頭來告訴瀏覽器允許在一個源執行的web應用程式訪問來自不同源的選定資源。當web應用程式請求其自身來源(域名、協議或埠)不同的資源時,它會執行跨域HTTP請求。

例如,讓我們考慮一個應用程式,它具有前端(UI)和後端(服務)。假設前端從https://demodomain-ui.com提供服務,後端從https://demodomain-service.com/api提供服務。如果終端使用者嘗試訪問該應用程式,出於安全原因,瀏覽器會限制從UI發起的跨域HTTP請求。

因此,為了克服這個問題,需要CORS標準,因為它允許伺服器不僅指定誰可以訪問其資源,還可以指定如何訪問這些資源。跨域請求使用標準的HTTP請求方法進行。大多數伺服器允許GET請求,這意味著它們允許來自外部來源(例如,網頁)的資源讀取其資源。HTTP請求方法,如PATCH、PUT或DELETE。以下是CORS標準新增的HTTP頭:

  • Access-Control-Allow-Origin

  • Access-Control-Allow-Credentials

  • Access-Control-Allow-Headers

  • Access-Control-Allow-Methods

  • Access-Control-Expose-Headers

  • Access-Control-Max-Age

  • Access-Control-Request-Headers

  • Access-Control-Request-Method

  • Origin

在全域性級別啟用CORS

首先,從Nuget包管理器安裝Microsoft.AspNet.WebApi.Cors

然後開啟檔案App_Start/WebApiConfig.cs。將以下程式碼新增到WebApiConfig.Register方法中:

在控制器和操作級別啟用CORS

我們也可以像下面這樣在控制器或操作方法級別啟用CORS。

示例

using System.Web.Http;
using System.Web.Http.Cors;
namespace DemoWebApplication.Controllers{
   [EnableCors("*", "*", "*")] //Controller level
   public class DemoController : ApiController{
      [EnableCors("*", "*", "*")] //Action level
      public IHttpActionResult Get(int id){
         return Ok();
      }
   }
}

類似地,我們可以使用[DisableCors]屬性停用cors。

更新於:2020年8月19日

6K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告