WebAPI批量请求Cross -Origin

时间:2018-04-05 04:55:40

标签: c# asp.net-mvc asp.net-web-api asp.net-web-api2 asp.net-web-api-routing

为get,put,post和delete方法正确触发了WebAPI服务的批处理请求。

当继续并为跨源运行相同的服务时,我遇到以下问题。

  

无法加载http://localhost:63187/api/batch:对预检请求的响应未通过访问控制检查:请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:56126”访问。响应的HTTP状态代码为400。

ajax请求将是这样的

{
contentType:
"multipart/mixed; boundary="batch_9de42638-127f-4f00-b2df-1dd93b8b8eeb""
data:
"--batch_9de42638-127f-4f00-b2df-1dd93b8b8eeb
↵Content-Type: application/http; msgtype=request
↵
↵PUT http://localhost:63187/put HTTP/1.1
↵Content-Type: application/json; charset=utf-8
↵Host: localhost:56126
↵
↵{"EmployeeID":4,"FirstName":"kalai","LastName":"Peacock","City":"London"}
↵--batch_9de42638-127f-4f00-b2df-1dd93b8b8eeb
↵Content-Type: application/http; msgtype=request
↵
↵PUT http://localhost:63187/put HTTP/1.1
↵Content-Type: application/json; charset=utf-8
↵Host: localhost:56126
↵
↵{"EmployeeID":2,"FirstName":"fdsfsda","LastName":"Fuller","City":"London"}
↵--batch_9de42638-127f-4f00-b2df-1dd93b8b8eeb--
↵"
type: "POST"
url: "http://localhost:63187/api/batch"
}

我已经在webapi服务中启用了交叉起源。

我已经安装了webapi cross origin支持包。

安装包Microsoft.AspNet.WebApi.Cors

我在webapi寄存器中启用了交叉原点,如下所示。

 config.EnableCors();

在webapi控制器中,我启用了所有原点支持

[EnableCors(origins: "*", headers: "*", methods: "*")]

我在哪里犯了错误。

1 个答案:

答案 0 :(得分:0)

通过在Web.config中添加标题信息可以解决您的问题

<system.webServer>
 <httpProtocol>
   <customHeaders>
     <add name="Access-Control-Allow-Origin" value="*" />
     <add name="Access-Control-Allow-Headers" value="Content-Type" />
     <add name="Access-Control-Allow-Methods" 
      value="GET,POST,PUT,DELETE,OPTIONS" />
     <add name="Access-Control-Allow-Credentials" value="true" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

如果可能的话,允许特定来源解决错误hereHow CORS works。 我还找到了一篇很好的解释文章hereSO article

还提供此参数(如果需要)

 [EnableCors(origins: "*", headers: "*", methods: "*", exposedHeaders: "X-Custom-Header")]