2015-11-23 42 views
0

我遇到了一個問題,即在我的Web API中啓用了CORS。 OPTIONS請求到服務器返回正確的CORS頭。但是,如果我更改API的web.config中的任何內容,則不會返回CORS標頭 Access-Control-Allow-Origin:「*」。在IIS中不返回CORS響應標頭(間歇性地) - Web API

要讓Web.API再次運行,我必須對web.config進行更改。重新編譯我網頁API,並用不同的版本號部署,然後API將功能和選項,以在返回我的CORS頭飛行前檢查

編輯:增加註冊和啓用CORS系統代碼的Global.asax.cs:

protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      GlobalConfiguration.Configure(WebApiConfig.Register);   
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
      log4net.Config.XmlConfigurator.Configure(); 
     } 
在WebApiConfig.cs

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 

     config.EnableCors();   

     config.Formatters.JsonFormatter. 
        SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 

     config.MapHttpAttributeRoutes(); 

     config.Services.Add(typeof(IExceptionLogger), new GlobalExceptionLogger()); 
     config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());...... 

而且這個......我離開API操作,當我離開辦公室......然後幾個小時後,API停止再次合作,而無需改變一切。我在這裏猜測,但它看起來像應用程序池回收時不會調用application_Start例程,或者在回收等後遺忘了CORS和路由的配置...

+0

你可以顯示啓用CORS的代碼嗎? – Keith

回答

0

在考慮了我在編輯中發佈的內容之後,並假定應用程序池回收後CORS被禁用。我決定移動一段代碼,在global.asax文件中啓用class WebApiConfig中的CORS config.EnableCors();protected void Application_Start()。所以我的Application_Start()例程看起來像這樣:

protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      GlobalConfiguration.Configuration.EnableCors(); 
      GlobalConfiguration.Configure(WebApiConfig.Register);` 
0

通常,當您啓用CORS時, Web.config中的幫助,但使用包:

Install-Package Microsoft.AspNet.WebApi.Cors 

,每當你需要添加相應的屬性,或者開發自己的HTTP過濾器。

+0

這一切都很好 - 我已經啓用了cors使用上面描述的NUget包,並且我使用所有頭文件等工作的API來運行API。我的問題是,當我改變web.config中的任何東西(例如Appsetting - key)時,我的客戶端應用程序將獲得以下錯誤:(CORS頭'Access-Control-Allow-Origin'缺失)當我調用API方法: - 然後我必須重新編譯應用程序並再次部署以使cors再次工作 – Paul

+0

@Paul我不認爲這是一個CORS問題。由於其他原因,您的應用程序很可能會停止工作。顯然,在這種情況下,它不會發送CORS頭文件,客戶端應用程序會拋出CORS相關錯誤。請確保您的應用程序在更改web.config後運行。 – Andrei

+0

它在配置更改後運行正常 - 我可以將空白添加到web.conig,然後CORS響應頭不會發送到調用瀏覽器.-我必須重置應用程序才能讓應用程序發送CORS響應頭 – Paul

相關問題