CORS设置被忽略,Access Control Allow-*标头未被写入



在测试ServiceStack时遇到著名的Access-Control-Allow-Origin问题后,我对CORS进行了大量阅读,以更好地理解该问题。我还遇到了一个非常有用的SO问题。

然而,那里的解决方案对我不起作用。我尝试包括CorsFeature插件,并手动设置端点配置,但在尝试了这两种方法后,我发现从服务器返回的响应标头不包括任何Access-Control-Allow-*标头,因此问题仍然存在。

我尝试了另一种解决方案,最终对我有效(解决了一些与此无关的其他问题)。我在服务的web.config中添加了以下内容:

<system.webServer>
  [...snip...]
  <httpProtocol>
    <customHeaders>
      <clear />
      <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" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

(其他读者请注意,这仅适用于IIS7+。请参阅http://enable-cors.org/了解有关在其他服务器上启用CORS的更多信息)

我的问题是:为什么我能够使用这个web.config方法编写头文件,而不是使用ServiceStack的内置CORS支持?有没有我遗漏的配置设置?

我在复习@mythz的SO答案时发现了这个。由于我还不完全理解的原因,添加请求过滤器(以及CorsFeature插件)可以使一切按预期工作。我没有收到飞行前选项请求的错误,也没有收到get和POST上的任何原点错误。

因此,简而言之,我的最终解决方案是将mythz在那篇文章中的回答中的代码复制到我的AppHost.Configure()中,并删除我的web.config自定义头。(在我从web.config中删除自定义标头之前,我实际上是在将标头加倍!)

相关内容

  • 没有找到相关文章

最新更新