RESTful WebService CORS Preflight Channel 未成功
Posted
技术标签:
【中文标题】RESTful WebService CORS Preflight Channel 未成功【英文标题】:RESTful WebService CORS Preflight Channel did not succeed 【发布时间】:2017-06-17 08:46:37 【问题描述】:我在 C# 中创建了一个 WebService。所有 GET 方法都可以正常工作。
现在我需要提供一些 POST 方法。通过 C# 调用它时,它可以正常工作。然后我尝试用 javascript 编写一个小的 html 页面来调用我的方法。但是那里出现了 CORS 错误(“预检通道未成功”)。
我已经在我的 web.config 文件中添加了以下部分:
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
</customHeaders>
遗憾的是它仍然无法正常工作。我做错了什么?
【问题讨论】:
我能问一下您使用的 API 框架是什么? 你处理 HEAD 方法吗?通常浏览器会使用 HEAD 方法进行预检请求,以检查 CORS 策略一次。 @Gusman 实际上通常带有OPTIONS
请求。见:en.wikipedia.org/wiki/…
@CodingGorilla 是的,你是对的 :)
【参考方案1】:
因此,您在这里所拥有的并不是处理 CORS 请求的真正有效方法。问题是这会将 CORS 标头添加到 所有响应,但浏览器将使用 OPTIONS
请求来检查 CORS 标头。这会起作用 如果您还为所有 API 端点实现 OPTIONS
请求。
更好的选择是使用 CORS 框架之一,例如:Enabling Cross-Origin Requests in ASP.NET Web API 2 for ASP.NET WebAPI 2。这种类型的框架将为您拦截 OPTIONS
请求并提供适当的响应,而无需您需要为每个端点手动创建 2 个路由。
【讨论】:
嘿@CodingGorilla,我刚刚将我的项目重写为 ASP.NET Web API 2,现在它可以正常工作了。谢谢。以上是关于RESTful WebService CORS Preflight Channel 未成功的主要内容,如果未能解决你的问题,请参考以下文章
SpringMVC实现Restful风格的WebService