【问题标题】:How to get rid of CORS in .net core 2.2?如何摆脱 .net core 2.2 中的 CORS?
【发布时间】:2019-05-24 17:39:47
【问题描述】:

我已将我的项目更新到 .net core 2.2,似乎 CORS 出现了 2.1 中没有的问题。

我在这个 URL 上运行我的应用程序: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();
}

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

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

}

但我仍然收到此 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?

【问题讨论】:

  • 你在用什么浏览器..?它看起来像 this issue.. 一个安全功能..
  • 我正在使用 Chrome,顺便说一句,我补充说我正在运行这样的应用程序:http://*:5300

标签: c# asp.net-core asp.net-core-2.2


【解决方案1】:

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

在使用 ASP.NET Core 响应 CORS 请求时,您不能同时使用 AllowAnyOriginAllowCredentials

从源“http://192.168.15.63:5302”访问“http://192.168.15.63:5301/api/permissions/UI”处的 XMLHttpRequest 已被 CORS 策略阻止

此消息表明您的服务器 正在侦听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();

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


旁白:

由于您已调用 AddCors 并配置了命名策略,因此没有理由在对 UseCors 的调用中配置相同的策略 - 您只需传入您之前使用 @987654331 配置的策略的名称即可@:

app.UseCors("MyPolicy");

【讨论】:

  • 你给出了准确的答案。不过,我有一个担心。如果我在发布应用程序后知道目的地(客户端 ip)会发生什么?也就是说,我可以动态添加一个 WithOrigin 吗?
  • @harveyt 刚刚从配置文件中读取了 WithOrigins 的参数。
猜你喜欢
  • 1970-01-01
  • 2019-08-04
  • 2019-07-02
  • 2019-09-14
  • 2020-03-16
  • 1970-01-01
  • 2020-03-05
  • 2019-06-15
  • 2019-06-14
相关资源
最近更新 更多