如何解决 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 层级
public class DemoController : ApiController{
[EnableCors("*", "*", "*")] //Action 层级
public IHttpActionResult Get(int id){
return Ok();
}
}
}
类似地,我们可以使用 [DisableCors] 属性禁用 Cors。

