WithOrigins 部分覆盖 Access-Control-Allow-Origin .网芯 API



在我的创业公司中.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标头,因为浏览器不需要OriginAccess-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>标签导致它在两个地方查找只应该存在一次的信息。

最新更新