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

时间:2013-02-06 17:51:59

标签: http-headers servicestack cors

在测试ServiceStack时遇到了着名的Access-Control-Allow-Origin问题,我在CORS上做了一堆阅读以更好地理解这个问题。我也遇到了this very helpful SO question

然而,那里的解决方案对我不起作用。我尝试包含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支持?是否有配置设置我在某处丢失?

1 个答案:

答案 0 :(得分:2)

我正在审核更多@mythz的SO答案,并遇到this one。由于我还没有完全理解的原因,添加请求过滤器(以及CorsFeature插件)允许一切按预期工作。我的预检OPTIONS请求或我的GET和POST上的任何原始错误都没有出错。

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