2015-12-03 40 views
12

據我瞭解,當啓用CORS因此,響應模型應該包括以下標題信息(前提是我想要讓一切):ASP.NET 5:訪問控制允許來源響應

Access-Control-Allow-Origin: * 
Access-Control-Allow-Method: * 
Access-Control-Allow-Header: * 

啓用它Startup

public void ConfigureServices(IServiceCollection services) 
{ 
    //... 
    services.AddCors(); 
    services.ConfigureCors(options => 
    { 
     options.AddPolicy("AllowAll", p => p.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials()); 
    }); 
    //... 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    //... 
    app.UseCors("AllowAll"); 
    //... 
} 

的問題是,沒有這些頭都回來了,我在嘗試從API請求時,出現以下錯誤:

響應預檢請求未通過訪問控制檢查:否 「訪問控制允許來源」標題存在於所請求的資源 。因此不允許訪問原產地'http://localhost'。

+0

這個錯誤來自於鉻控制檯? – user2120121

+1

您是否在MVC中間件之前註冊Cors中間件?你可以在你的'Configure'方法上分享更多信息嗎? –

+3

正如基蘭說,如果你已經在你的'Startup.Configure'方法添加'app.UseCors'後'app.UseMvc'這是不行的。您需要在MVC中間件之前添加Cors中間件。 (順便說一句,在RC1沒有'ConfigureCors'方法再和選項可以直接傳遞到'AddCors'法) –

回答

16

確保您app.UseMvc前將Startup.Configure方法中添加app.UseCors,因爲你需要的CORS中間件的MVC中間件之前被應用。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    ... 

    //Add CORS middleware before MVC 
    app.UseCors("AllowAll"); 

    app.UseMvc(...); 
} 

否則,請求將在CORS中間件應用之前完成。這是因爲UseMvc調用UseRouter這最終加入RouterMiddleware,並在未找到該請求的路由處理這個中間件僅執行下一個配置中間件。

+0

我遇到了這個問題,以及,謝謝。 –

+1

非常感謝你! – Boler