2017-01-09 70 views
2

我有一個Owin WebAPI2 .NET應用程序,我在Azure的AppService上託管。Azure WebApp Cors不添加Cors標頭

我想添加使用Azure的CORS支持作爲in this article。看起來很簡單,你只需要像這樣將一個Origin站點添加到列表中:http://screencast.com/t/r2ATq4u5

我現在期望響應頭包含這個允許的Origin。

然而,CORS標頭不包含在響應頭時,我使用Fiddler檢查: http://corstestqm.azurewebsites.net/breeze/restaurantsbreeze/basictest

步驟我都試過:

  • 剝離出來,從我的解決方案的所有CORS的NuGet庫和我的API項目中的所有CORS代碼痕跡。
  • 部署到一個全新的AppService服務
  • Enabled Owin Cors AllowAll

這些都沒有任何影響。 (即,響應不包含在Azure中指定的CORS頭)。

我在這裏錯過了一些非常基本的東西嗎?

UPDATE 我更簡化的問題: 在VS2015,我創建了一個新的API項目,並將其推到http://corstestbasicap2.azurewebsites.net/api/values/ 沒有變化(即它不應該啓用CORS)。

然後,我使用Test-Cors tool來擊中該API。它沒有按預期得到CORS錯誤。然後我進入Azure並添加一個虛擬URL(例如http://www.example.com),然後再次嘗試CORS測試。它應該失敗,因爲Azure應該只讓example.com通過。但是,它工作正常。

我再edit CORS again in Azure,並添加http://www.test-cors.org以下http://www.example.com(所以它應該讓無論是通過),現在頭返回Access-Control-Allow-Origin:http://www.test-cors.org預期。

但這沒有意義?當「http://www.test-cors.org」不在允許的起源中時,前面的呼叫肯定會失敗?它似乎沒有做任何有用的事情?!

回答

3

你可以在你的web.config波紋管配置中添加實現這些:

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*"/> 
     <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept,Authorization"/> 
     <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS"/> 
     </customHeaders> 
    </httpProtocol> 
</system.webServer> 

在Global.asax中:

protected void Application_BeginRequest() 
{ 
    if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS") 
    { 
    Response.Flush(); 
    } 
} 

如果你想從門戶網站控制,請查看波紋管圖像:

請注意,根據應用服務CORS documentation,您無法在一個API應用中同時使用Web API CORS和App Service CORS。您必須清理您的項目關於Web API CORS

不要嘗試在一個API 應用程序中同時使用Web API CORS和App Service CORS。應用服務CORS將優先,Web API CORS將有 無效。例如,如果您在App 服務中啓用了一個原始域,並且在您的Web API代碼中啓用了所有原始域,那麼您的Azure API應用程序將只接受來自您在 Azure中指定的域的調用。

enter image description here

+0

約努茨你好,謝謝你,我已經發現,在web.config的工作方式,但我想控制與Azure的應用服務CORS爲每個應用服務插槽都有不同的要求(我知道我可以通過debug webconfigs來完成)。我的問題真的是爲什麼Azure CORS功能不能按預期工作? – Rodney

+0

Hi Rodney,您可以從每個插槽的門戶網站控制Cors標頭:從刀片菜單中選擇yuur應用,插槽和CORS。你試過這個嗎?我在我的回覆中添加了一個圖片 –

+2

Hi Ionut,是的,我已經完成了這個,但它不起作用(這是我的問題所在 - 請參閱我原始問題中的截圖鏈接)。它似乎表現得非常古怪,而且不起作用。 – Rodney