这里列举几个通过验证的可用的CORS使用示例,api
方便在须要的时候能够直接使用跨域
示例1app
#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中把中间件设置到管道中ui
示例2spa
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中设置的跨域的一些要求,这种写法经试验也是能够的code
示例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方法上,使用注解:blog
//[EnableCors("AnotherPolicy")] //这种事有名称的策略的注解添加 [EnableCors()] //这种是模式策略的注解添加 [Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase
注意,即便是默认的策略也是须要使用注解进行声明的,不然会跨域错误。默认的策略只是说不用在注解中声明策略名而已ip