我在前端使用Angular 6,在服务器上使用基于Core2的Web API。我编写了这段代码,并且在使用ASP.NET客户端时可以正常工作,但是使用Angular会遇到一些麻烦。
services.AddMvc():
services.AddCors(o => o.AddPolicy("FreePolicy", builder =>
{
builder.WithHeaders(<redacted>)
//builder.AllowAnyHeader()
.AllowCredentials()
.AllowAnyMethod()
.AllowAnyOrigin();
}));
如果我评论builder.WithHeaders
而取消评论builder.AllowAnyHeader
,错误就会消失,但Angular会崩溃。
我的标题:
这看起来像是发生了我的错误的地方,因为“ MaybeUnknown”。您可以在值周围看到方括号,因此它看起来像一个数组。我可以修复它,并且可以解决我的问题吗?
如果我不取消注释builder.AllowAnyHeader
,则在服务器上发帖后出现错误。
更新
我在服务器端的标头
客户端上的答案 0 :(得分:3)
从您发布的最新屏幕截图可以清楚地看到,该屏幕截图显示了通过Chrome发出的HTTP请求,您在WithHeaders
调用中缺少标题。如果您查看请求中的Access-Control-Request-Headers
,则会看到它包含四个标头:
但是,您的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类型。