【问题标题】:Access to XMLHttpRequest at 'http://localhost...' from origin has been blocked by CORS policy:CORS 策略已阻止从源访问“http://localhost...”处的 XMLHttpRequest:
【发布时间】:2023-03-09 04:15:01
【问题描述】:

我有一个 .net 核心应用程序,它有一个 REST API 被 Angular 客户端使用,但遇到了 CORS 问题。

在.net核心里,我已经有了

app.UseCors(); 

在配置方法中以及将响应头设置为

Access-Control-Allow-Headers *
Access-Control-Allow-Methods *
Access-Control-Allow-Origin *

但仍然在客户端出现错误(在本地端口 4200 上运行):

从源“http://localhost:4200”访问“http://localhost/myAPI/api/Table”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。

【问题讨论】:

    标签: c# angular asp.net-core cors


    【解决方案1】:

    预检请求的传递:

    if (context.Request.Method == "OPTIONS")
        {
         return;
        }
    

    另请阅读:Enable Cross-Origin Requests (CORS) in ASP.NET Core

    【讨论】:

    • 不确定会去哪里?在 asp.net 核心代码中?
    • 在接收请求的方法中。
    【解决方案2】:

    我所做的是将 cors 添加到配置服务方法中:

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

    然后在配置方法中

     app.UseCors("CorsPolicy");

    【讨论】:

      【解决方案3】:

      如果使用 web api,您可以使用此代码:

      public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context)
      {
          context.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
          return base.TokenEndpointResponse(context);
      }
      

      【讨论】:

        猜你喜欢
        • 2019-10-05
        • 2021-03-08
        • 1970-01-01
        • 2020-07-09
        • 2019-10-30
        • 2019-11-22
        • 2019-11-11
        • 2019-09-01
        相关资源
        最近更新 更多