【问题标题】:RESTful WebService CORS Preflight Channel did not succeedRESTful WebService CORS Preflight Channel 未成功
【发布时间】: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 是的,你是对的 :)

标签: c# web-services cors


【解决方案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,现在它可以正常工作了。谢谢。
猜你喜欢
  • 2018-03-24
  • 2020-06-30
  • 1970-01-01
  • 2018-12-22
  • 2014-01-14
  • 2020-11-12
  • 2020-09-05
  • 2015-10-15
  • 2014-04-25
相关资源
最近更新 更多