如何摆脱.net核心2.2中的CORS?

Lir*_*man 5 c# asp.net-core asp.net-core-2.2

我已将我的项目更新为.net core 2.2,看起来CORS正在制造2.1中没有的问题.

我在这个网址上运行我的应用: http://*:5300

我在以下代码中添加了此代码Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    ...

    services.AddCors(options =>
                     options.AddPolicy("MyPolicy", builder =>
                     {
                         builder.AllowAnyOrigin()
                                .AllowAnyMethod()
                                .AllowCredentials()
                                .AllowAnyHeader();
                     }));

    services.AddMvc();

    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...

    app.UseCors(builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyMethod()
               .AllowCredentials()
               .AllowAnyHeader();
    });

    app.UseAuthentication();
    app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我在其上添加[EnableCors]了我的`BaseController"类的属性:

[EnableCors]
[Authorize]
[Produces("application/json")]
[Route("api/[controller]")]
public class BaseController : Controller
{

}
Run Code Online (Sandbox Code Playgroud)

但我仍然收到此CORS错误:

来自' http://192.168.15.63:5302 '的' http://192.168.15.63:5301/api/permissions/UI ' 访问XMLHttpRequest 已被CORS策略阻止: 对预检请求的响应未通过访问控制检查: 当请求的凭据模式为"包含"时,响应中的"Access-Control-Allow-Origin"标头的值不能是通配符"*". XMLHttpRequest发起的请求的凭据模式由withCredentials属性控制.


我还能做些什么来彻底删除CORS?

Kir*_*kin 7

当请求的凭据模式为“ include”时,响应中“ Access-Control-Allow-Origin”标头的值不得为通配符“ *”。

你不能同时使用AllowAnyOrigin,并AllowCredentials使用ASP.NET核心,以响应CORS请求时。

CORS策略已阻止从源地址' http://192.168.15.63:5302 ' 访问' http://192.168.15.63:5301/api/permissions/UI ' 处的XMLHttpRequest

此消息表明您的服务器正在侦听http://192.168.15.63:5301,但您的客户端正在从发送请求http://192.168.15.63:5302。由于端口不同,因此来源不同,因此使用了CORS保护。

为了使请求成功,请将您的ASP.NET CORS配置代码更新为以下内容:

builder.WithOrigins("http://192.168.15.63:5302")
    .AllowAnyMethod()
    .AllowCredentials()
    .AllowAnyHeader();
Run Code Online (Sandbox Code Playgroud)

这会将客户端的来源配置为CORS支持-当然,您可以根据需要将其作为配置选项添加到应用程序本身(使用例如appsettings.json)。


在旁边:

调用AddCors并配置命名策略后,没有理由在对的调用中配置相同的策略UseCors-您只需使用以下命令传入您先前配置的策略名称即可AddCors

app.UseCors("MyPolicy");
Run Code Online (Sandbox Code Playgroud)