ajax POST调用不同域的webAPI
ajax POST call to webAPI on different domain
我已经阅读了许多关于"不同域的POST请求"问题的"解决方案",也被称为"跨域POST",但我仍然不能像他们说的那样解决这个问题。
通过阅读所有关于这个问题的文章,我现在知道为什么会发生这种情况,但我仍然需要它在我的项目中以安全的方式工作,而不使用黑客移动或诸如此类的东西。我想如果有人知道如何让它工作,帮助我们,我的意思是"我们",因为我相信还有人没有编出来。
我的情况:我有托管在domainA上的webapp,这使得ajax post call 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.
我正在捕捉提琴手的请求和响应,我看到在响应端根本没有Access-Control-Allow
标头。
我写了我正在使用的东西,现在因为这不是我应该怎么做才能使ajax post call从domainA工作到domainB,或者什么是真正的解决方案。
与其尝试依赖各种可用的脚本/变通方法来执行跨域调用,不如在自己的域中创建一个web方法。
可以用AJAX调用它。
然后让你自己的web方法执行对另一个域的调用-这不会受到与让浏览器执行调用相同的安全问题的影响。
所以你的调用会像这样:
浏览器AJAX调用->您自己的web方法->调用其他域服务->结果返回到您的方法->您的方法返回到您的浏览器
听起来这可能是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),并且一切都崩溃了。
- 如何使用WCF服务和javascript表单post上传.doc文件
- Jquery POST未填充数组
- 如何在php文件中获取$.post-ajax传递的值
- 在POST中将html表作为csv提交
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 如何使用post方法从方法上传文件
- Django: AJAX + CSRF POST gives 403
- AJAX不会在文件上传后重定向到网页-POST方法
- 下载使用POST数据动态生成的文件
- 如何使用自定义标头跨域执行AJAX POST
- 错误405:向Java控制器(Ajax)发送JSON时找不到POST方法
- jQuery在输入下验证post错误消息
- 在文本区域POST后解码JSON
- Node.js - POST to iFrame?
- 中止POST XHR可靠
- ajax post在webapi中传递null参数
- 如何从Angular将数据POST到WebAPI控制器's$http服务
- 为什么我不能通过AngularJS's post发送一个post到我的WebApi ?
- c#在POST中从jquery传递字符串给WebAPI项目方法时出错
- ajax POST调用不同域的webAPI