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 个路由。

【讨论】:

嘿@Co​​dingGorilla,我刚刚将我的项目重写为 ASP.NET Web API 2,现在它可以正常工作了。谢谢。

以上是关于RESTful WebService CORS Preflight Channel 未成功的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC实现Restful风格的WebService

Node.js 调用 restful webservice

Web Service学习之九:Restful WebService

得到 200 响应,还有 CORS 错误?

webservice和restful的区别

webservice和restful的区别