在我的创业公司中.cs我有
app.UseCors(builder => builder.WithOrigins("https://acme.com"));
在我的网络配置中,我有
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Accept-Encoding" value="gzip, deflate, sdch" />
<add name="Access-Control-Allow-Origin" value="*"/>
<add name="Access-Control-Allow-Headers" value="Origin..." />
当我提交这样的ajax请求时,它告诉我ACAO只允许一个值,我有多个"https://acme.com,*"。
当我完全删除值部分时,同样的错误,但它没有列出我的来源,而是开始列出允许访问控制标头标签中的值。
当我完全删除 ACAO 标签时,可以理解地告诉我没有标签。
如果我的配置中有WithOrigins
规范,ACAO 标签应该是什么样子?
这个问题并不清楚你实际上想要允许什么起源。看来您的选择是:
-
如果只想允许
https://acme.com
,则可以从web.config
中删除<add name="Access-Control-Allow-Origin" value="*"/>
行,服务器仍将发送Access-Control-Allow-Origin: https://acme.com
响应标头。 -
如果你想允许所有源,
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)
是你想改用的 - 在这种情况下,你也希望只删除与<add name="Access-Control-Allow-Origin" value="*"/>
从您的web.config
,因为服务器已经发送了允许所有源的Access-Control-Allow-Origin: *
。
您还可以在app.UseCors
调用中指定允许的标头,如下所示:
app.UseCors(builder => builder.WithOrigins("https://acme.com")
.WithHeaders("Authorization", "Location"));
请注意,您不需要在那里指定Origin
标头,因为浏览器不需要Origin
在Access-Control-Allow-Headers
中就可以允许它。(因为Origin
标头是由浏览器本身在请求中设置和发送的;它不是"自定义"标头。
如果您只想允许所有请求标头,则可以改为执行以下操作:
app.UseCors(builder => builder.WithOrigins("https://acme.com")
.AllowAnyHeader());
如果在此处使用.WithHeaders(…)
或.AllowAnyHeader()
标头,则还可以从web.config
中删除<add name="Access-Control-Allow-Headers" value="Origin..."/>
行
这实际上是别人的项目,所以我不确定 web.config 条目是从哪里开始的。我完全删除了 Web 配置的<httpprotocol>
部分,并使用以下正常过程使AddCors()
工作:
app.UseCors(builder =>
{
builder.WithOrigins("http://acme.com");
});
似乎在web.config中有一个<httpProtocol>
标签导致它在两个地方查找只应该存在一次的信息。