我已经阅读了许多关于“不同域名上的POST请求”问题的“解决方案”,也称为“跨域帖子”,但我仍然不能让它像他们说的那样修复它。 / p>
从阅读有关此问题的所有文章,我现在知道为什么会发生这种情况,但我仍然需要它以我的项目工作,以安全的方式工作,而不使用黑客移动或此类事情。 我想如果有人知道如何让它起作用,帮助我们,我的意思是'我们'因为我相信仍然有人没有成功。
我的情况: 我有一个托管在domainA上的webapp,它调用了对domainB(mvc4 webAPI)的ajax调用。 ajax post call看起来像这样:
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 post调用从domainA到domainB,或者是什么才是真正的解决方案。
答案 0 :(得分:2)
不是尝试依赖各种可用的脚本/解决方法来执行跨域调用,而是为什么不在您自己的域上创建Web方法。
你可以用你的AJAX调用它。
然后让您自己的网络方法执行对其他域的调用 - 这不会遇到与浏览器执行调用相同的安全问题。
所以你的电话会是这样的:
浏览器AJAX通话 - &gt;您自己的网络方法 - &gt;致电其他域名服务 - &gt;结果返回到您的方法 - &gt;您的方法将返回浏览器。
答案 1 :(得分:0)
听起来它可能是CORS预检请求的问题。请尝试在http://www.html5rocks.com/en/tutorials/cors/,http://remysharp.com/2011/04/21/getting-cors-working/和http://www.w3.org/TR/cors/
中阅读相关内容无论如何......如果是非简单的AJAX请求,浏览器首先会向您的URL发出OPTIONS请求,您需要处理该请求并返回预期的结果。如果浏览器的OPTIONS响应正常,则它会首先发送您希望它发送的实际POST请求。因此,如果您只有POST的处理程序而不是OPTIONS(在您的服务器上),那么您可能无法正确处理预检请求(OPTIONS)并且一切都崩溃了。