dotnet core 之 CORS使用示例
这里列举几个经过验证的可用的CORS使用示例,
方便在需要的时候可以直接使用
示例1
#region snippet2 public void ConfigureServices(IServiceCollection services) { services.AddCors(options => { options.AddPolicy(MyAllowSpecificOrigins, builder => { //1.可用 //builder.WithOrigins("http://example.com", // "http://www.contoso.com", // "http://localhost:65317"); builder.AllowAnyOrigin(); //2.可用 }); }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); } #endregion #region snippet3 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseHsts(); } app.UseCors(MyAllowSpecificOrigins); app.UseHttpsRedirection(); app.UseMvc(); } #endregion
这种比较常见,即在ConfigureServices中添加中间件及定义其策略;而在Configure中把中间件设置到管道中
示例2
public void ConfigureServices(IServiceCollection services) { //services.AddCors(); //经试验,此句加或者不加,都是可以的 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); } #region snippet2 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseHsts(); } // Shows UseCors with CorsPolicyBuilder. app.UseCors(builder => { builder.WithOrigins("http://example.com", "http://www.contoso.com", "https://localhost:44375", "http://localhost:65317"); }); app.UseHttpsRedirection(); app.UseMvc(); } #endregion
注意,这个示例中,直接在Configure中的app.UseCors中设置的跨域的一些要求,这种写法经试验也是可以的
示例3
public void ConfigureServices(IServiceCollection services) { services.AddCors(options => { options.AddDefaultPolicy( builder => { builder.WithOrigins("http://example.com", "http://www.contoso.com", "http://localhost:65317"); }); options.AddPolicy("AnotherPolicy", builder => { builder.WithOrigins("http://www.contoso.com", "http://localhost:65317") .AllowAnyHeader() .AllowAnyMethod(); }); }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseHsts(); } app.UseHttpsRedirection(); app.UseMvc(); }
经试验发现,像这种没有在Configure中使用app.UseCors的,应该都属于局部设置跨域的,需要在相应的Controller或者Action方法上,使用注解:
//[EnableCors("AnotherPolicy")] //这种事有名称的策略的注解添加 [EnableCors()] //这种是模式策略的注解添加 [Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase
注意,即使是默认的策略也是需要使用注解进行声明的,否则会跨域错误。默认的策略只是说不用在注解中声明策略名而已