【发布时间】:2012-12-08 01:25:36
【问题描述】:
我已经阅读了许多关于“不同域上的 POST 请求”问题的“解决方案”,也称为“跨域发布”,但我仍然无法像他们说他们修复它那样工作。
通过阅读所有有关此问题的文章,我现在知道为什么会发生这种情况,但我仍然需要它以安全的方式在我的项目中工作,而无需使用黑客动作或类似的东西。 如果有人知道如何使它起作用,我想帮助我们,我的意思是“我们”,因为我相信仍然有人没有弥补。
我的情况: 我有托管在 domainA 上的 webapp,它使 ajax 后调用 domainB(mvc4 webAPI)。 ajax post 调用如下所示:
var profile = { Id:"1234567890", Name:"Name_01"}
$.ajax({
type: "POST",
url: 'http://domainB/api/Profile',
data: JSON.stringify(profile)
});
@domainB 我用来设置自定义响应头:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*"/>
<add name="Access-Control-Allow-Headers" value="X-Requested-With" />
<add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS"/>
</customHeaders>
</httpProtocol>
</system.webServer>
@domainB webAPI post 方法我有这个:
public void Post(dynamic newProfile)
{
...
}
因此,在激活/启动 ajax 调用时,在 webAPI 项目的调试模式下,我在 webAPI 中的 JsonFX.Serilization.DataWriter 处收到 SerializationException Operation could destabilize the runtime,并且作为浏览器的错误,我得到
XMLHttpRequest cannot load http://domainA/api/Profile. Origin http://domainB is not allowed by Access-Control-Allow-Origin.
我正在 Fiddler 上捕获请求并做出响应,我发现响应端根本没有 Access-Control-Allow 标头。
我写了我正在使用的东西,现在因为这还没有解决我应该怎么做才能使 ajax 发布调用从 domainA 工作到 domainB,或者什么是真正的解决方案。
【问题讨论】:
-
如果您可以控制
domainB的服务器,您可以添加 CORS 响应标头,这将修复您的浏览器错误。 en.wikipedia.org/wiki/Cross-origin_resource_sharing
标签: javascript asp.net ajax xmlhttprequest cross-domain