CORS 策略已阻止从源访问“http://localhost...”处的 XMLHttpRequest:

Posted

技术标签:

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

我有一个 .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 状态。

【问题讨论】:

【参考方案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);

【讨论】:

以上是关于CORS 策略已阻止从源访问“http://localhost...”处的 XMLHttpRequest:的主要内容,如果未能解决你的问题,请参考以下文章

CORS 策略已阻止从源对 X 的 XMLHttpRequest 的 CORS 访问

CORS 策略已阻止从源“null”访问图像

CORS 策略已阻止从源 URL 访问 URL 的 XMLHttpRequest [重复]

CORS 策略已阻止从源访问“http://localhost...”处的 XMLHttpRequest:

CORS 策略已阻止从源“http://localhost:3001”访问“blahblahblah”获取

Javascript:CORS 策略已阻止从源“http ...”获取“https ..”的访问权限 [重复]