如何在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+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告