跨域 WebAPI 批量请求

Posted

技术标签:

【中文标题】跨域 WebAPI 批量请求【英文标题】:WebAPI Batch Request for Cross -Origin 【发布时间】:2018-09-14 19:22:09 【问题描述】:

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

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

无法加载http://localhost:63187/api/batch:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,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 跨源支持包。

安装包 Microsoft.AspNet.WebApi.Cors

我已经在 webapi 注册中启用了跨源,如下所示。

 config.EnableCors();

在 webapi 控制器中,我启用了所有来源支持

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

我哪里做错了。

【问题讨论】:

【参考方案1】:

通过在 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>

如果可能的话,还允许特定来源,它解决了here 和How CORS works 解释的错误。 我还找到了一篇解释得更清楚的文章 here 和 SO article

也提供这个参数(如果需要)

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

【讨论】:

以上是关于跨域 WebAPI 批量请求的主要内容,如果未能解决你的问题,请参考以下文章

webapi 解决ajax跨域请求问题

WebAPI 请求跨域问题

WebApi 中开启跨域请求方式

web api 跨域请求,ajax跨域调用webapi

WebApi跨域

C#+.netFrameWork4.5.2+WebAPI+Jquery+Ajax跨域请求问题