在我的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只允许一个值,我有多个&#34; https://acme.com,*&#34;。
当我完全删除值部分时,同样的错误,但它不是列出我的原点,而是开始列出Allow-Access-Control-Headers标记中的值。
当我完全删除ACAO标签时,可以理解的是告诉我没有标签。
如果我的配置中有WithOrigins
规范,那么ACAO标记应该是什么样的?
答案 0 :(得分:1)
问题不清楚你真正想要允许的起源。看来您的选择是:
如果您只想https://acme.com
,那么您可以从<add name="Access-Control-Allow-Origin" value="*"/>
中删除web.config
行,服务器仍会发送Access-Control-Allow-Origin: https://acme.com
个响应标题
如果您想允许所有来源,app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)
就是您想要使用的 - 而且这种情况也是如此
来自<add name="Access-Control-Allow-Origin" value="*"/>
的{{1}},因为服务器已经发送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()
<add name="Access-Control-Allow-Headers" value="Origin..."/>
行
答案 1 :(得分:1)
这实际上是别人的项目,所以我不确定web.config条目从何处开始。我完全删除了网络配置的<httpprotocol>
部分,并使用以下正常流程让AddCors()
工作:
app.UseCors(builder =>
{
builder.WithOrigins("http://acme.com");
});
好像在web.config中有一个<httpProtocol>
标记会导致它在两个地方查找只应该出现一次的信息。