Net7配置跨域和部分跨域支持

发布时间 2023-08-14 15:41:26作者: 王月半子

跨域策略应该不算陌生,是浏览器的同源策略做的限制,下面基于后端开发来完成跨域的配置和策略

一:全局跨域支持

 /// <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();