Net7配置跨域和部分跨域支持
跨域策略应该不算陌生,是浏览器的同源策略做的限制,下面基于后端开发来完成跨域的配置和策略
一:全局跨域支持
/// <summary> /// 跨域 /// </summary> public static class CorsExtension { /// <summary> /// 配置跨域策略 /// </summary> /// <param name="services"></param> public static void AddCorsExt(this IServiceCollection services) { //中间件解决跨域问题 services.AddCors(options => { // allcore: 策略名称 options.AddPolicy("allcore", corsBuilder => { corsBuilder.AllowAnyHeader() .AllowAnyOrigin() .AllowAnyMethod(); }); }); } /// <summary> /// 选择不同的跨域策略 /// </summary> /// <param name="app"></param> public static void UseCorsExt(this WebApplication app) { app.UseCors("allcore"); } }
二:部分跨域支持
//首先获取到配置里面的CorsUrl,可以按照你自己的规则操作
//比如:"CorsUrls": "http://localhost:8081,http://localhost:8080,http://localhost:9980,http://127.0.0.1:9980,http://data.mac.com",
string corsUrls = Configuration["CorsUrls"];
services.AddCors(options =>
{
options.AddDefaultPolicy(
builder =>
{
builder.WithOrigins(corsUrls.Split(","))
//添加预检请求过期时间
.SetPreflightMaxAge(TimeSpan.FromSeconds(2520))
//如果不需要跨域请注释掉.AllowCredentials()或者增加跨域策略
.AllowCredentials()
.AllowAnyHeader().AllowAnyMethod();
});
});
然后就是Use了,这里很关键的是和Auth的顺序,如果先鉴权后才识别跨域,那鉴权没有意义,所以,应该顺序在auth前面
//UseCors,UseAuthenticationg两个位置的顺序很重要 app.UseCors(); app.UseAuthentication(); app.UseAuthorization();