1

當我在我的web.config像下面的配置CORS,每一件事情的工作:多CORS爲GET而不是工作PUT/POST與飛行前的請求的Web API 2

<customHeaders> 
<add name="Access-Control-Allow-Origin" value="http://localhost:3000"/> 
<add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD, OPTIONS"/> 
<add name="Access-Control-Allow-Headers" value="accept, cache-control, credentials, content-type, authorization, origin, X-Requested-With, X-dev-mode"/> 
</customHeaders> 

然而,當我嘗試讓這樣多CORS:

// Filename: Global.asax.cs 
protected override void Application_Start() 
{ 
    ApiConfig.Register(GlobalConfiguration.Configuration); 
} 

// Filename: ApiConfig.cs 
public static void Register(HttpConfiguration config) 
{ 
    var cors = new EnableCorsAttribute("http://localhost:3000,http://someOtherUrl.com/", "*", "*"); 
    config.EnableCors(cors); 
} 

它爲GET(即獲取內容等),但使用POST/PUT時(即保存的內容等),它提供了在瀏覽器這個錯誤(鉻)控制檯

提取API無法加載http://localhost:56214/api/1/content/SAVE。對預檢請求的響應不會通過訪問控制檢查:請求的資源上不存在「訪問控制 - 允許來源」標頭。因此不允許訪問原產地'http://localhost:3000'。如果一個不透明的響應滿足您的需求,請將請求的模式設置爲'no-cors'來取消禁用CORS的資源。

該請求在OPTIONS上失敗。請注意,我有自定義處理程序,我的路線也配置。 還有一件事要提的是,保存內容的PUT/POST調用是通過反應的ajax調用。這可能是一個問題嗎?

回答

0

問題是第二個URL中的斜線。將其更改爲這個和它的作品:

var cors = new EnableCorsAttribute("http://localhost:3000,http://someOtherUrl.com", "*", "*"); 
0

你試過像

<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" /> 
去除空白的訪問控制允許的方法