在 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.cs
的Configure
方法中添加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