跨域 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 批量请求的主要内容,如果未能解决你的问题,请参考以下文章