具有发布请求的Angular 6标头不起作用

时间:2018-11-12 16:25:59

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

我在前端使用Angular 6,在服务器上使用基于Core2的Web API。我编写了这段代码,并且在使用ASP.NET客户端时可以正常工作,但是使用Angular会遇到一些麻烦。

enter image description here

services.AddMvc():
services.AddCors(o => o.AddPolicy("FreePolicy", builder =>
{
    builder.WithHeaders(<redacted>)
    //builder.AllowAnyHeader()
    .AllowCredentials()
    .AllowAnyMethod()
    .AllowAnyOrigin();
}));

如果我评论builder.WithHeaders而取消评论builder.AllowAnyHeader,错误就会消失,但Angular会崩溃。

我的标题:

enter image description here

这看起来像是发生了我的错误的地方,因为“ MaybeUnknown”。您可以在值周围看到方括号,因此它看起来像一个数组。我可以修复它,并且可以解决我的问题吗?

如果我不取消注释builder.AllowAnyHeader,则在服务器上发帖后出现错误。

enter image description here

更新

我在服务器端的标头

enter image description here

客户端上的

MY标头 enter image description here

更新2 配置方式 enter image description here

更新3 enter image description here

1 个答案:

答案 0 :(得分:3)

从您发布的最新屏幕截图可以清楚地看到,该屏幕截图显示了通过Chrome发出的HTTP请求,您在WithHeaders调用中缺少标题。如果您查看请求中的Access-Control-Request-Headers,则会看到它包含四个标头:

  • apiss
  • client-id
  • zump-api-version
  • 内容类型

但是,您的WithHeaders呼叫包括Content-Type,因此您需要添加以下内容:

builder.WithHeaders("client-id", "zump-api-version", "apiss", "content-type")
    ...

注意:这都是不区分大小写的,因此您可以按照自己喜欢的任何方式对其进行大小写。

MDN文档中有关于此的更多信息:Access-Control-Allow-Headers,其中包括以下说明:

  

请注意,始终允许使用某些标头:Accept,Accept-Language,Content-Language,Content-Type(但仅具有其application / x-www-form-urlencoded解析值的MIME类型(忽略参数)) ,多部分/表单数据或文本/纯文本)。这些称为简单标头,您无需显式指定它们。

这说明了为什么不必指定Accept(这是“简单标题”)的原因。在您的示例中,您必须指定Content-Type,因为它不是以上语句中引用的三种MIME类型。