2015-09-08 55 views
3

我在這裏一個陌生而奇怪的situtation使用點時設置(「」)。CORS標頭不被查詢字符串

如果我發送一個請求:/scenes/?lang=es-ar,頭被設置就好了,一切似乎確定。

Headers are present

但是,如果我送一個給:/scenes/?lang=es-ar&sort.asc=creation,頭失蹤,我無法響應獲取由於交叉原點。

Headers are missing

CORS由Owin的CORS中間件自動管理,所以這是從我手中。

這裏是我的中間件的配置:

private void ConfigureCors(IAppBuilder application) 
{ 
    CorsPolicy policy = new CorsPolicy() 
    { 
     AllowAnyHeader = true, 
     AllowAnyOrigin = true, 
     SupportsCredentials = true, 
    }; 

    policy.Methods.Add("GET"); 
    policy.Methods.Add("POST"); 
    policy.Methods.Add("PUT"); 
    policy.Methods.Add("DELETE"); 
    policy.Methods.Add("OPTIONS"); 

    policy.ExposedHeaders.Add("Location"); 

    application.UseCors(new CorsOptions() 
    { 
     PolicyProvider = new CorsPolicyProvider() 
     { 
      PolicyResolver = request => System.Threading.Tasks.Task.FromResult(policy) 
     } 
    }); 
} 

爲什麼標題沒有對響應發送?

我猜它與"."(點)在sort.asc=creation

東西我使用ASP.NET網頁API5.2.3)和Microsoft.Owin的最新版本.Cors3.0.1

回答

2

託管服務器IIS可能會攔截預發送請求。爲了確保ASP.NET處理Option的請求,添加以下web.config中:

 <system.webServer> 
      <handlers> 
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
      <remove name="OPTIONSVerbHandler" /> 
      <remove name="TRACEVerbHandler" /> 
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" 
       type="System.Web.Handlers.TransferRequestHandler" 
       preCondition="integratedMode,runtimeVersionv4.0" /> 
      </handlers> 
     </system.webServer> 

在我看來這不是一個不錯的選擇使用Microsoft.Owin.Cors用的WebAPI,如果你打算使用IIS作爲主機環境。對於Asp.net的WebAPI一個更好的選擇將是Asp.net web API implementation of CORS