如何在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。