如何在ASP.NET Core中启用CORS
我正在尝试启用我的ASP.NET Core Web API上的跨源数据共享,但是我被卡住了。
EnableCors
属性接受string
types的policyName
作为参数:
// Summary: // Creates a new instance of the Microsoft.AspNetCore.Cors.Core.EnableCorsAttribute. // // Parameters: // policyName: // The name of the policy to be applied. public EnableCorsAttribute(string policyName);
policyName
是什么意思,如何在ASP.NET Core Web API上configurationCORS ?
您必须在应用程序启动时在ConfigureServices
方法中configurationCORS策略:
public void ConfigureServices(IServiceCollection services) { services.AddCors(o => o.AddPolicy("MyPolicy", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); })); // ... }
builder
的CorsPolicyBuilder
允许您根据需要configuration策略。 您现在可以使用该名称将策略应用于控制器和操作:
[EnableCors("MyPolicy")]
或者将其应用于每个请求:
public void Configure(IApplicationBuilder app) { app.UseCors("MyPolicy"); // ... }
这是.Net-Core 1.1
不幸的是,在这个特定的情况下,文档是非常混乱的。 所以我会让它变得简单:
- 将
Microsoft.AspNetCore.Cors
nuget包添加到您的项目 - 在
ConfigureServices
方法中,添加services.AddCors();
-
在
Configure
方法中,在调用app.UseMvc()
和app.UseStaticFiles()
,添加:app.UseCors(builder => builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials());
而已。 每个客户端都可以访问您的ASP.NET核心网站/ API。
对于.Net-Core 2.0
- 将
Microsoft.AspNetCore.Cors
nuget包添加到您的项目 -
在
ConfigureServices
方法中,在调用services.AddMvc()
之前,添加:services.AddCors(options => { options.AddPolicy("AllowAll", builder => { builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials(); }); });
-
在
Configure
方法中,在调用app.UseMvc()
之前,添加app.UseCors("AllowAll");
AllowAll
是我们需要在app.UserCors中提到的策略名称。 可以是任何名字。
基于Henk的回答,我已经能够提出具体的领域,我想要允许的方法,也是我想要启用CORS的标题:
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddCors(); services.ConfigureCors(options => options.AddPolicy("AllowSpecific", p => p.WithOrigins("http://localhost:1233") .WithMethods("GET") .WithHeaders("name"))); }
用法:
[EnableCors("AllowSpecific")]