WithOrigins 部分覆盖 Access-Control-Allow-Origin .NetCore API
WithOrigins partially overrides Access-Control-Allow-Origin .NetCore API
在我的 Startup.cs 我有
app.UseCors(builder => builder.WithOrigins("https://acme.com"));
在我的 web.config 我有
<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, *”。
当我完全删除值部分时,同样的错误,但它没有列出我的来源,而是开始列出 Allow-Access-Control-Headers 标签中的值。
当我完全删除 ACAO 标签时,可以理解的是它告诉我没有标签。
如果我的配置中有 WithOrigins
规范,ACAO 标签应该是什么样子?
问题并不清楚您实际想要允许哪些来源。您的选择似乎是:
如果您只想允许 https://acme.com
,那么您可以从 web.config
中删除 <add name="Access-Control-Allow-Origin" value="*"/>
行,服务器仍会发送 [=15] =] 响应 header.
如果你想允许所有来源,app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)
是你想要使用的 - 在这种情况下你也想只删除带有
<add name="Access-Control-Allow-Origin" value="*"/>
来自您的 web.config
,因为服务器已经发送 Access-Control-Allow-Origin: *
以允许所有来源。
您还可以在 app.UseCors
调用中指定允许的 header,如下所示:
app.UseCors(builder => builder.WithOrigins("https://acme.com")
.WithHeaders("Authorization", "Location"));
请注意,您不需要在此处指定 Origin
header,因为浏览器不需要 Origin
在 Access-Control-Allow-Headers
中以便它被允许。 (因为 Origin
header 是由浏览器本身在请求中设置和发送的;它不是“自定义” header。)
如果您只想允许所有请求 header,您可以改为这样做:
app.UseCors(builder => builder.WithOrigins("https://acme.com")
.AllowAnyHeader());
如果您在那里使用 .WithHeaders(…)
或 .AllowAnyHeader()
header,您还可以从 web.config
[=29= 删除 <add name="Access-Control-Allow-Headers" value="Origin..."/>
行]
这实际上是别人的项目,所以我不确定 web.config 条目是从哪里开始的。我完全删除了 Web 配置的 <httpprotocol>
部分,并通过使用正常过程使 AddCors()
工作:
app.UseCors(builder =>
{
builder.WithOrigins("http://acme.com");
});
似乎在 web.config 中有一个 <httpProtocol>
标签导致它在两个地方查找本应只出现一次的信息。
在我的 Startup.cs 我有
app.UseCors(builder => builder.WithOrigins("https://acme.com"));
在我的 web.config 我有
<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, *”。
当我完全删除值部分时,同样的错误,但它没有列出我的来源,而是开始列出 Allow-Access-Control-Headers 标签中的值。
当我完全删除 ACAO 标签时,可以理解的是它告诉我没有标签。
如果我的配置中有 WithOrigins
规范,ACAO 标签应该是什么样子?
问题并不清楚您实际想要允许哪些来源。您的选择似乎是:
如果您只想允许
https://acme.com
,那么您可以从web.config
中删除<add name="Access-Control-Allow-Origin" value="*"/>
行,服务器仍会发送 [=15] =] 响应 header.如果你想允许所有来源,
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)
是你想要使用的 - 在这种情况下你也想只删除带有<add name="Access-Control-Allow-Origin" value="*"/>
来自您的web.config
,因为服务器已经发送Access-Control-Allow-Origin: *
以允许所有来源。
您还可以在 app.UseCors
调用中指定允许的 header,如下所示:
app.UseCors(builder => builder.WithOrigins("https://acme.com")
.WithHeaders("Authorization", "Location"));
请注意,您不需要在此处指定 Origin
header,因为浏览器不需要 Origin
在 Access-Control-Allow-Headers
中以便它被允许。 (因为 Origin
header 是由浏览器本身在请求中设置和发送的;它不是“自定义” header。)
如果您只想允许所有请求 header,您可以改为这样做:
app.UseCors(builder => builder.WithOrigins("https://acme.com")
.AllowAnyHeader());
如果您在那里使用 .WithHeaders(…)
或 .AllowAnyHeader()
header,您还可以从 web.config
[=29= 删除 <add name="Access-Control-Allow-Headers" value="Origin..."/>
行]
这实际上是别人的项目,所以我不确定 web.config 条目是从哪里开始的。我完全删除了 Web 配置的 <httpprotocol>
部分,并通过使用正常过程使 AddCors()
工作:
app.UseCors(builder =>
{
builder.WithOrigins("http://acme.com");
});
似乎在 web.config 中有一个 <httpProtocol>
标签导致它在两个地方查找本应只出现一次的信息。