.Net中跨域问题
HTML页面
Cors
跨域设置
全局配置跨域
namespace Bunny.Cors.Net; public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // TODO 先处理跨域之后再访问控制器 var serviceCollection = builder.Services; serviceCollection.AddCors(options => { options.AddPolicy("BunnyApiCors", policyBuilder => { policyBuilder.WithOrigins("*") .WithHeaders("*") .WithMethods("*"); }); }); serviceCollection.AddControllers(); serviceCollection.AddEndpointsApiExplorer(); serviceCollection.AddSwaggerGen(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); // TODO 使用跨域中间件 app.UseCors("BunnyApiCors"); app.UseAuthorization(); app.MapControllers(); app.Run(); } }
需要设置跨域
var serviceCollection = builder.Services; serviceCollection.AddCors(options => { options.AddPolicy("BunnyApiCors", policyBuilder => { policyBuilder.WithOrigins("*") .WithHeaders("*") .WithMethods("*"); }); });使用跨域中间件
// TODO 使用跨域中间件 app.UseCors("BunnyApiCors");
属性跨域
配置跨域
namespace Bunny.DestinationNode.Net; public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // TODO 先处理跨域之后再访问控制器 var serviceCollection = builder.Services; serviceCollection.AddCors(options => { options.AddPolicy("BunnyApiCors", policyBuilder => { policyBuilder.WithOrigins("*") .WithHeaders("*") .WithMethods("*"); }); }); serviceCollection.AddControllers(); serviceCollection.AddEndpointsApiExplorer(); serviceCollection.AddSwaggerGen(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); // TODO 使用跨域中间件 app.UseCors(); app.UseAuthorization(); app.MapControllers(); app.Run(); } }
控制器上操作
[EnableCors("BunnyApiCors")]这个操作也可以在方法上使用。
[ApiController] [Route("[controller]/")] [EnableCors("BunnyApiCors")] public class BunnyController : ControllerBase { [HttpGet("GetBunny")] public string GetBunny() { return "bunny111"; } }
在方法上使用
[ApiController] [Route("[controller]/")] public class BunnyController : ControllerBase { [HttpGet("GetBunny")] [EnableCors("BunnyApiCors")] public string GetBunny() { return "bunny111"; } }
如果在类上使用了[EnableCors("BunnyApiCors")],但是某些方法不希望跨域可以这样。
在方法上使用注解[DisableCors]
[HttpGet("GetBunny/Disable")] [DisableCors] public string GetBunnyDisable() { return "bunny111"; }
默认策略
var builder = WebApplication.CreateBuilder(args); var serviceCollection = builder.Services; // TODO 先处理跨域之后再访问控制器 serviceCollection.AddCors(options => { options.AddDefaultPolicy(policyBuilder => policyBuilder.WithOrigins("*") .WithHeaders("*") .WithMethods("*")); }); serviceCollection.AddControllers(); serviceCollection.AddEndpointsApiExplorer(); serviceCollection.AddSwaggerGen(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); // TODO 使用跨域中间件 app.UseCors(); app.UseAuthorization(); app.MapControllers(); app.Run();
需要指定默认策略AddDefaultPolicy
// TODO 先处理跨域之后再访问控制器 serviceCollection.AddCors(options => { options.AddDefaultPolicy(policyBuilder => policyBuilder.WithOrigins("*") .WithHeaders("*") .WithMethods("*")); });
还没有评论,来说两句吧...