【发布时间】:2013-07-16 19:26:49
【问题描述】:
我在获取跨域 POST 请求以访问最新 beta 2 版本中的 Api 控制器时遇到了很多麻烦。
Chrome(和其他浏览器)吐槽:
OPTIONS http://api.hybridwebapp.com/api/values 400 (Bad Request)
POST http://api.hybridwebapp.com/api/values 404 (Not Found)
它可能与 this issue 有关,但我已经应用了该解决方法和其他几个修复程序,例如 web.config additions here
我一直在努力解决这个问题,所以我创建了一个解决方案来准确地重现这个问题。
加载网络应用程序会有 2 个按钮,一个用于 GET,一个用于 POST,响应将显示在按钮旁边。 GET 工作。无法让 POST 成功返回。
我可以从 Fiddler 那里得到原因的提示,但这没有任何意义,因为如果您查看响应,它确实在 Access-Controll-Allow-Origin 标头中包含域:
解决方案中有一个名为“ConfigurationScreenshots”的文件夹,其中包含一些 IIS 配置(网站绑定)和项目属性配置的屏幕截图,以便尽可能轻松地帮助我:)
编辑:不要忘记将此条目添加到主机文件 (%SystemRoot%\system32\drivers\etc):
127.0.0.1 hybridwebapp.com api.hybridwebapp.com
**STATUS: ** 似乎某些浏览器(例如 Chrome)允许我继续 POST,而不管 OPTIONS 响应中的错误消息如何(而其他浏览器(例如 Firefox)则不允许)。但我认为这还没有解决。
查看它所拥有的 OPTIONS 请求的 Fidler 截图
访问控制允许来源:http://hybridwebapp.com
还有错误:
来源http://hybridwebapp.com是不允许的
这完全矛盾,就好像它忽略了标题一样。
【问题讨论】:
-
能否也包含 POST 请求的标头?预检也很奇怪:它在正文中返回一个带有错误消息的 400,但它也返回了正确的 CORS 标头,因此预检成功(正如它后面跟着一个 POST 请求的事实所证明的那样)。跨度>
-
已添加。感谢您的观看。
-
我相信您可能会遇到一个已知问题,该问题在测试版后已修复。以下错误评论有修复链接:aspnetwebstack.codeplex.com/workitem/1050
-
谢谢,是的,看起来这可能是解决方案。我究竟如何应用修复程序,我从来没有这样做过,我总是使用 nuget?我尝试在 VS 中打开源代码,构建,然后引用新编译的 System.Web.Cors.dll 和 System.Web.Http.Cors.dll 但我的应用程序抛出异常:
Could not load file or assembly 'System.Web.Cors' or one of its dependencies. Strong name signature could not be verified. The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. -
我建议不要获取最新的夜间版本,因为有一些代码更改可能会破坏你。相反,我建议您创建一个自定义提供程序工厂,它只是具有修复程序的
AttributeBasedPolicyProviderFactory的副本,然后执行config.SetCorsPolicyProviderFactory(your-custom-provider-factory-here);之类的操作...这很可能会解决您的问题..
标签: asp.net asp.net-web-api cors