【问题标题】:.net core allowing sending back error 401 when using CORS (instead of zero).net 核心允许在使用 CORS 时发回错误 401(而不是零)
【发布时间】: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

标签: api asp.net-core cors http-status-codes


【解决方案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

【讨论】:

    猜你喜欢
    • 2017-09-25
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2019-07-16
    • 2018-07-03
    • 2019-10-27
    相关资源
    最近更新 更多