【问题标题】:Add 'access-control-allow-origin' response to options preflight request in Asp.NET向 Asp.NET 中的选项预检请求添加“访问控制允许来源”响应
【发布时间】:2016-03-08 16:26:09
【问题描述】:

我在 Chrome 中收到以下错误:

对预检请求的响应未通过访问控制检查:请求中不存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:9000” 访问。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    app.UseIISPlatformHandler();

    app.UseDefaultFiles();
    app.UseStaticFiles();

    app.UseCors(policy => policy
       .WithOrigins("http://localhost:9000")
       .AllowAnyMethod()
       .WithHeaders("Access-Control-Allow-Origin, Content-Type, x-xsrf-token, Authorization")
       .AllowCredentials());

    app.UseMvc();
}

根据 chrome,响应中没有添加单个标头。

在 Asp.NET 5 中将 access-control-allow-origin 标头添加到选项响应的正确方法是什么?

【问题讨论】:

  • 这是最前沿的,所以我没有太多时间玩它,但你所做的似乎与官方文档不相符:docs.asp.net/en/latest/security/cors.html不是说它是不正确,但你在哪里找到你的指导?鉴于您显然正在设置 CORS 策略,我不会认为您需要显式设置 Access-Control-Allow-Origin 标头。
  • 我真的不记得很久以前我必须让页面工作的标准 GET 请求时放入的 app.UseCors 块。 (没有它他们就无法工作)。但是现在我有更复杂的请求,浏览器正在发送一个预检请求,这段代码不起作用。
  • 另外我要指出的是那里的文档实际上已经过时了(尽管是最新的)。
  • 你为什么不用.AllowAnyHeader();

标签: asp.net asp.net-mvc cors asp.net-core


【解决方案1】:

考虑谷歌浏览器有an issue,它不支持localhost通过Access-Control-Allow-Origin

在您的代码中,您已在Configure 方法中使用AddCorsUseCors 方法启用了CORS,请确保您已遵循Specifying a CORS Policy 中提供的说明(在@ 987654328@方法)和How to enable CORS in ASP.NET 5

您也可以简单地写一个Action Filter for plain Asp.net MVC controller

CORS 的类型

  1. Microsoft.AspNet.WebApi.Cors :使用它来启用 CORS 请求 仅适用于 Web API。
  2. Microsoft.AspNet.Cors:使用它为 MVC 控制器启用 CORS。
  3. Microsoft.Owin.Cors :使用它为所有跨域启用 CORS 请求进入您的网站,例如,当您想要 为 Web API 和 SignalR 启用 CORS。

【讨论】:

    【解决方案2】:

    这并没有什么意义,但正如@Sirwan 建议的那样,使用.AllowAnyHeader() 设置选项响应的访问权限...

    【讨论】:

      【解决方案3】:

      为了克服预检问题,在您的 API 中添加与 [httpoption] 相同名称的方法并从那里返回成功,现在只需运行您的 Web/客户端应用程序,您将在第一次 httpoption 方法时点击相同的方法两次,然后是您的原始方法

      【讨论】:

        【解决方案4】:

        将其放在 startup.cs 文件的配置部分中:

        app.UseCors (x => x.AllowAnyOrigin ().AllowAnyMethod ().AllowAnyHeader ());
        

        【讨论】:

          猜你喜欢
          • 2016-03-08
          • 2019-12-05
          • 1970-01-01
          • 2019-10-28
          • 2020-10-15
          • 1970-01-01
          • 2017-11-11
          • 1970-01-01
          相关资源
          最近更新 更多