2016-07-20 55 views
1

我們有一個Intranet應用程序,我們正在使用AngularJS前端和Web Api後端。它基本上是對現有的ASP.NET/WCF應用程序的重新設計,它只被我們的一些員工使用。帶有web api的訪問控制允許來源請求

我們打算使用Windows身份驗證來強制執行此版本中的某些安全性(舊版本中沒有),並且我們在使用Internet Explorer以外的瀏覽器時遇到了一些問題。例如,Chrome始終會出現401-未經授權的錯誤。我已經被指示跳過現在的安全功能(是的,我知道,不是一個好主意),所以我禁用了它們,但現在我看到一個錯誤,當我試圖與API交談(在一個單獨的項目),但在Chrome中,而不是在IE中。

XMLHttpRequest無法加載http://localhost:62415/api/Emails。請求的資源上沒有「Access-Control-Allow-Origin」標題。因此不允許訪問原產地'http://localhost:50900'。響應的HTTP狀態碼爲401.

我們在我們的API項目中啓用了CORS,所以我不確定我需要在這裏做什麼。我們在本地開發中使用本地主機,但在質量保證中使用本地主機,並且這些網站將使用同一域中具有不同子域的URL。

我用我的項目啓動類,它有這個方法:

public void Configuration(IAppBuilder app) 
    { 
     var config = new HttpConfiguration(); 

     WebApiConfig.Register(config); 
     app.UseCors(CorsOptions.AllowAll); 
     app.UseWebApi(config); 
    } 

我必須失去了一些東西。我們原本在我們WebApiConfig這個代碼,但恢復它並沒有解決任何事情:

var cors = new EnableCorsAttribute("*", "*", "*"); 

cors.SupportsCredentials = true; 
config.EnableCors(cors); 

任何幫助表示讚賞。

+0

別t使用ASP.net足以說,但你有什麼應該這樣做,一些其他的替代品在這裏http://enable-cors.org/server_aspnet.html你應該看到一個請求與方法設置爲OPTION在真正的GET/POST之前出現在對該請求的響應中時,標題應該指定允許訪問控制起源設置爲*或任何實際的客戶域。 – shaunhusain

回答

1

不需要添加:

VAR CORS =新EnableCorsAttribute( 「」, 「」, 「*」); config.EnableCors(cors);

出於安全原因,瀏覽器限制從腳本內發起的跨源HTTP請求。例如,XMLHttpRequest遵循同源策略。因此,使用XMLHttpRequest的Web應用程序只能向自己的域發出HTTP請求。 然而,您可以通過由:

  • 中的NuGet
  • 安裝Microsoft.Owin.Cors包添加此方法在Startup.cs
public void Configuration(IAppBuilder app) 
     { 
      app.UseCors(CorsOptions.AllowAll); 
     } 
相關問題