在 ASP.Net 5 / Core 中启用跨域资源共享 (CORS)

Posted

技术标签:

【中文标题】在 ASP.Net 5 / Core 中启用跨域资源共享 (CORS)【英文标题】:Enable cross-origin resource sharing (CORS) in ASP.Net 5 / Core 【发布时间】:2016-05-01 12:54:53 【问题描述】:

如何将 CORS 标头添加到我的 MVC6 应用程序?我对全局和按操作感兴趣。

似乎 ASP.Net vNext/5/Core 发生了一些变化,因此对于不同的版本,这个问题有不同的答案。我正在使用 RC1。

我已经尝试过这个 SO“How to enable CORS in ASP.NET Core”,但来到 var policy = new Microsoft.AspNet.Cors.Core.CorsPolicy(); 时,“Core”命名空间不存在。

在“How do you enable cross-origin requests (CORS) in ASP.NET 5 & MVC 6?”中尝试了答案,但方法/扩展方法services.ConfigureCors 不存在。

最后一个 SO 答案与this blog post 相同,也表示首先安装 Microsoft.AspNet.Cors (Install-Package Microsoft.AspNet.Cors)。但是这样做会使事情变得更糟,然后services.AddCors()由于某种原因不存在。

“Enable cross-origin requests (CORS) in ASP.NET 5 & MVC 6”表示要安装“Microsoft.AspNet.Cors.Core”,但它不存在,using Microsoft.AspNet.Builder; 无济于事。

【问题讨论】:

尝试在ConfigureServices方法中添加services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin().AllowAnyHeader().AllowAnyHeader()));,在Startup.csConfigure方法中添加app.UseCors("AllowAll");。您应该将"Microsoft.AspNet.Cors": "6.0.0-rc1-final" 添加到"dependencies"project.json。见the documentation 那行得通。根据博客文章中的说明,它正在安装 Microsoft.AspNet.Cors 5.2.3 版,需要 6.0.0 版。 这是一个很大的问题,现在有很多开发者。包将被重命名,对旧名称的请求将不会被重定向。我发布了the suggestion,但微软似乎没有看到这个问题足够严重。顺便说一下,包现在重命名为Microsoft.AspNetCore.Cors。 :-) 这个 CORS 是一个移动的目标。谢谢奥列格,知道有用。所以它可能会在下一个版本中再次改变。 【参考方案1】:

在 ASP.NET Core 1.0 版本中,我必须在 Startup.cs 中的 ConfigureServices 中添加以下内容,以使全局 CORS 配置在全局范围内且不带属性地工作:

services.AddMvc(options =>

    options.Filters.Add(new CorsAuthorizationFilterFactory("AllowFromAll")); 
);

services.AddCors(options =>

    options.AddPolicy("AllowFromAll", builder => builder
        .WithMethods("GET", "POST")
        .AllowAnyOrigin()
        .AllowAnyHeader());
);

【讨论】:

【参考方案2】:

您需要添加预发布版本:

Install-Package Microsoft.AspNet.Cors -PreRelease

在 Startup.cs 的 ConfigureServices 下添加以下内容:

services.AddCors(options =>

    options.AddPolicy("AllowFromAll",
        builder => builder
        .WithMethods("GET", "POST")
        .AllowAnyOrigin()
        .AllowAnyHeader());
);

如果要全局添加,请将其放在配置下:

app.UseCors("AllowFromAll");

如果您希望每个控制器/动作都使用它,您可以使用以下内容来装饰它们:

[EnableCors("AllowFromAll")]

文档中有更多关于 cors 的信息,供您参考:http://docs.asp.net/en/latest/security/cors.html

【讨论】:

以上是关于在 ASP.Net 5 / Core 中启用跨域资源共享 (CORS)的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.Net Core 5 WebAPI 中启用 CORS

小5聊Asp.Net Core3.1基础之跨域设置以及设置不对的地方

在 ASP.NET Webforms 中启用跨域请求

如何在ASP NET Core中实现CORS跨域

如何在 ASP.NET Core 中启用 CORS

在 asp.net core 中启用 CORS