2016-09-23 50 views
0

我想讓CORS使用新的WebAPI項目。該項目只是使用ActiveDirectoryBearerAuthentication的默認WebAPI模板(即具有MVC和WebAPI參考)。使用WebAPI啓用CORS

每當我試圖讓我的API請求,我遇到了以下錯誤:

XMLHttpRequest cannot load https://localhost:44385/api/values. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://localhost:44369' is therefore not allowed access.

我已經安裝Microsoft.Owin.Cors和Microsoft.AspNet.WebApi.Cors。

我WebApiConfig是這樣的:

public static void Register(HttpConfiguration config) 
{ 
    config.EnableCors(); 
    .... 

我Startup.Auth是這樣的:周圍的淨

public void ConfigureAuth(IAppBuilder app) 
{ 
    app.UseCors(CorsOptions.AllowAll); 

    app.UseWindowsAzureActiveDirectoryBearerAuthentication(
    .... 

解決方案說補充:

<customHeaders> 
     <!-- Adding the following custom HttpHeader will help prevent CORS from stopping the Request--> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
    </customHeaders> 

到web.config 。但是,這樣做只是允許所有內容,而不管Microsoft.AspNet.WebApi.Cors是否已安裝,啓用或不可用。

+0

難道你不希望你允許一切,或者你仍然想限制訪問和阻止一些其他請求 –

+0

有一點要知道的是,IE需要在響應中包含P3P頭以便CORS工作 – pm100

+0

我想阻止除一個域之外的所有內容。我以爲我會倒退,以確保它正在工作。如果我沒有做到這一點,我會認爲web.config解決方案解決了它 - 它不是隻是允許所有的東西,無論CORS配置。 – Mardoxx

回答

0

只允許單個域,你可以做到以下幾點:

<system.webServer> 
<httpProtocol> 
    <customHeaders> 
    <remove name="X-Powered-By" /> 
    <clear /> 
    <add name="Access-Control-Allow-Origin" value="http://www.myalloweddomain.com" /> 
    </customHeaders> 
</httpProtocol> 
</system.webServer> 

不過,如果是隻允許單個域。如果您嘗試添加額外的添加節點,您的網站將無法加載。如果你想允許多個域名,那麼你需要嘗試列出的解決方案之一here

+0

我試過這個,它的工作原理,謝謝。但是CORS中間件又有什麼意義呢? – Mardoxx

+0

我假設你是指你在代碼中完成的部分?正如我在答覆結束時所說的,web.config設置僅適用於單個域。代碼解決方案允許多域名白名單。另外,有些人更喜歡在代碼中而不是在web.config中提供解決方案。 – Necoras

0

檢查事項:

  • Owin踢在IIS(確保你包括Microsoft.Owin.Host.SystemWeb)
  • 檢查IIS不劫持您的要求IIS hijacks CORS Preflight OPTIONS request
  • 使用fiddler將OPTION請求直接發送到指定的URL(有時PREFLIGHT請求只是服務器返回的掩碼500) - 瀏覽器不是很好處理該問題
+0

我會看看,謝謝。這篇帖子的答案是「......作爲最後的手段......」,這將只允許每個主機和代碼覆蓋任何東西,當然? – Mardoxx