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