.net 核心允许在使用 CORS 时发回错误 401(而不是零)

Posted

技术标签:

【中文标题】.net 核心允许在使用 CORS 时发回错误 401(而不是零)【英文标题】:.net core allowing sending back error 401 when using CORS (instead of zero) 【发布时间】:2020-05-19 01:50:01 【问题描述】:

我的客户端 JS 应用正在接收状态代码 0,而它实际上是 401。 当我使用邮递员运行相同的请求时,我得到了预期的 401。

我已启用 cors 如下:

services.AddCors(o => o.AddPolicy("cors", builder =>
            
                builder.WithOrigins("http://localhost:4200")
                       .AllowAnyMethod()
                       .AllowAnyHeader()
                       .AllowCredentials();
            ));

....
app.UseCors("cors");

当没有身份验证问题 (401) 时,cors 正在工作。

我在客户端收到错误代码 0,而它应该是 401。

【问题讨论】:

邮递员不关心 CORS,所以无论如何它都会在那里工作:) @juunas 我说要明确 401 确实从服务器返回 您是否检查了 Postman 发送的所有标头*,并尝试在您的 JS 请求中放入完全相同的标头? * 在“标题”选项卡中,展开“临时标题”以查看邮递员发送的所有内容,而无需您明确设置它们 @GuillaumeSasdy 浏览器网络选项卡显示 401。但在 JS 中为 0 【参考方案1】:

此错误的原因很可能是您的服务器上的 CORS 和 Web 浏览器的组合。

原因: 我的猜测是,您的服务器响应中缺少一些必需的 CORS 标头。当使用不正确的 Cors 标头时,浏览器会返回状态 0。

解决方案:我再次猜测您注册中间件的顺序不正确。 根据文档:

使用端点路由,CORS 中间件必须配置为 在对 UseRouting 和 UseEndpoints 的调用之间执行。不正确 配置将导致中间件停止正常运行。

我会按照这样的顺序为您注册中间件(取决于您使用的中间件):

app.UseRouting();
app.UseCors("cors");
app.UseAuthorization();

app.UseEndpoints(endpoints =>

    endpoints.MapControllers();
);
...
//register app.UseMvc(); last

【讨论】:

以上是关于.net 核心允许在使用 CORS 时发回错误 401(而不是零)的主要内容,如果未能解决你的问题,请参考以下文章

即使我允许所有来源,为啥我会收到 CORS 错误?

如何使用 .NET Core 2 配置 Angular 6 以允许来自任何主机的 CORS?

无法在 asp.net 核心中为身份服务器 4 启用 CORS

CORS:使用 ASP.NET 4.5.1 MVC 的 Rest API

azure 应用服务和 asp.net 核心:CORS 策略甚至 AllowAnyOrigin 也阻止了来源

asp.net core mvc cors请求被拒绝[重复]