.net core 3.1 跨域问题

不知道为什么,在2.2中的跨域配置在3.1中使用会发生问题:Access to XMLHttpRequest at 'http://xx.xx.xx.xx/api/' from origin 'http://localhost:8082' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.改动了一下startup.cs中的配置,ConfigureServices修改如下:

services.AddCors(options =>
            {
                options.AddPolicy("any", builder =>
                {
                    builder.WithOrigins("http://192.168.0.211:8082")
                           .AllowAnyMethod()
                           .AllowAnyHeader()
                           .AllowCredentials()//指定处理cookie
                           .WithExposedHeaders("Content-Disposition");//指定处理cookie
                });
            });

在3.0中AllowAnyOrigin()已不能使用, 然后新增一个中间件CorsMiddleware:

public class CorsMiddleware
    {
        private readonly RequestDelegate _next;
        public CorsMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task Invoke(HttpContext context)
        {
            if (!context.Response.Headers.ContainsKey("Access-Control-Allow-Origin"))
            {
                context.Response.Headers.Add("Access-Control-Allow-Origin", context.Request.Headers["Origin"]);
                context.Response.Headers.Add("Access-Control-Allow-Headers", context.Request.Headers["Access-Control-Request-Headers"]);
                context.Response.Headers.Add("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE");
                context.Response.Headers.Add("Access-Control-Allow-Credentials", "true");
                if (context.Request.Method.Equals("OPTIONS"))
                {
                    context.Response.StatusCode = StatusCodes.Status200OK;
                    return;
                }
            }
            await _next(context);
        }
    }

 在startup.cs的Configure方法添加:

 app.UseMiddleware();

 app.UseRouting();

 app.UseCors("any");

 

你可能感兴趣的:(c#,asp.net)