2017-03-20 34 views
2

在我Startup.cs我有WithOrigins部分覆蓋訪問控制允許來源.NetCore API

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,*」。

當我完全刪除values部分時,出現相同的錯誤,但不是列出我的出處,而是開始列出Allow-Access-Control-Headers標記中的值。

當我完全刪除ACAO標籤時,可以理解的告訴我沒有標籤。

如果我的配置中有WithOrigins規範,ACAO標籤應該是什麼樣子?

+0

如果您更新了您的問題以包含顯示您要發送的請求的客戶端JavaScript代碼的代碼片段,這將非常有用。如果以逐字的形式粘貼,也可以幫助您在瀏覽器控制檯中看到確切的錯誤信息。 – sideshowbarker

回答

1

問題不清楚您實際想要允許的來源。看來你的選擇是:

  • 如果你想允許只是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頭,因爲瀏覽器不要」 t要求Origin位於Access-Control-Allow-Headers以允許它被允許。 (因爲Origin頭設置,並通過瀏覽器本身的請求而發送的;它不是一個「自定義」報頭。)

如果你只想讓所有的請求頭,可以改爲做到這一點:

app.UseCors(builder => builder.WithOrigins("https://acme.com") 
           .AllowAnyHeader()); 

如果您使用.WithHeaders(…).AllowAnyHeader()頭那裏,你可以接着也web.config

+0

我在嘗試所有這些組合的同時刪除了'',並且在ajax調用上發生預檢請求錯誤,指出「對預檢請求的響應沒有通過訪問控制檢查:在請求的資源上沒有'Access-Control-Allow-Origin'標頭,因此'https:// acme.com'原因不允許訪問。 –

+0

我想允許特定的來源。我絕對不想讓任何來源。 –

+0

你說在某些情況下,你會得到一個關於具有多個值「'https:// acme.com'」&「'*'」的ACAO頭的控制檯消息。所以這似乎意味着你的'app.UseCors'調用正在工作,'因爲這是你指定'https:// acme.com'的唯一地方,對吧?因此,刪除''應該可以避免將* *添加到ACAO值的問題。但它聽起來像是讓瀏覽器給你一個不同的錯誤?這將有助於查看確切的錯誤消息,並解釋導致每個錯誤情況的步驟 – sideshowbarker

1

這其實是別人的項目,請在<add name="Access-Control-Allow-Headers" value="Origin..."/>線,所以我不知道在web.config中的條目來自與開始。我完全刪除了網絡配置的<httpprotocol>部分,得到了AddCors()使用的正常過程的工作:

app.UseCors(builder => 
     { 
      builder.WithOrigins("http://acme.com"); 
     }); 

它好像有在web.config的<httpProtocol>標籤是導致它在查找兩個地方的信息只應該出現一次。