我想从控制器中启用CORS到asp.net core 2应用程序中,因此我在控制器中添加了以下属性:
[EnableCors(origins: "*", headers: "accept,content-type,origin,x-my-header", methods: "*")]
但是我在起源上却出错了
“ EnableCorsAttribute”的最佳重载没有参数 名为“起源”
所以我从元数据访问EnableCorsAttribute,发现了以下方法:
namespace Microsoft.AspNetCore.Cors
{
public class EnableCorsAttribute : Attribute, IEnableCorsAttribute
{
public EnableCorsAttribute(string policyName);
public string PolicyName { get; set; }
}
}
但是应该是这样的方法:
public EnableCorsAttribute(string origins, string headers, string methods);
为什么我没有它?我需要安装东西吗?我是Asp.Net Core的新手,我不明白为什么该方法不在我的api中。问候
答案 0 :(得分:2)
在EnableCorsAttribute(string origins, string headers, string methods)
包中没有像Microsoft.AspNetCore.Cors
这样的属性。
在您的情况下并基于Enable Cross-Origin Requests (CORS) in ASP.NET Core:
如果提供的cors配置是针对整个应用的,则在您的ConfigureServices
方法中添加cors服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
}
然后使用Configure
方法的全局cors中间件:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseCors(builder => builder
.WithOrigins("https://my.web.com", "http://localhost:5001")
.AllowAnyMethod()
.AllowCredentials()
.WithHeaders("Accept", "Content-Type", "Origin", "X-My-Header"));
//code omitted
}
用您的原籍替换("https://my.web.com", "http://localhost:5001")
。
如果您想在ConfigureServices
方法中使用多个cors配置,
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("MyCorsPolicy", builder => builder
.WithOrigins("https://my.web.com", "http://localhost:5001")
.AllowAnyMethod()
.AllowCredentials()
.WithHeaders("Accept", "Content-Type", "Origin", "X-My-Header"));
});
}
在Configure
方法中:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseCors("MyCorsPolicy");
//code omitted
}
最后进入控制器:
[EnableCors("MyCorsPolicy")]
public class MyController : Controller
{ ... }