多CORS为GET而不是工作PUT/POST与飞行前的请求的Web API 2

问题描述:

当我在我的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调用。这可能是一个问题吗?

问题是第二个URL中的斜线。将其更改为这个和它的作品:

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

你试过像

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