AngularJS $ http.post在Chrome中不起作用,只在IE中起作用

时间:2015-03-21 19:10:41

标签: javascript angularjs post asp.net-web-api

我正在尝试将一个简单的JSON对象发布到我的本地asp.net web.api服务。

这是代码的和平。

    createTable: function (table) {
        var res = $http.post('http://localhost:50827/api/v0.1/xxxx/create-some-table', table);
        res.success(function (data, status, headers, config) {
            alert("Sent : " + JSON.stringify({ data: data }));
        });
        res.error(function (data, status, headers, config) {
            alert("failure message: " + JSON.stringify({ data: data }));
        });
    }

Asp.Net Web Api启用了Cors,这种代码安静适用于Internet Explorer。但谷歌的Chrome出现错误:选项:http://localhost:50827/api/v0.1/xxxx/create-some-table 404(未找到)

相同的webapi控制器有一些其他的GET方法,它运行良好。

有什么想法吗?

感谢任何帮助。

Pavlo

1 个答案:

答案 0 :(得分:0)

因此,这似乎是一个已知问题,即Chrome发送"飞行前"在发送实际的交叉原始请求之前请求使用OPTIONS动词。

有些情况下它不会发送飞行前请求,但遗憾的是发送JSON不是其中之一。

您似乎没有设置ASP.NET WebAPI服务器来处理这些类型的飞行前检查请求。可能是因为它显然不是默认支持它。

幸运的是,网上有很多帮助可以帮助你解决这个问题。这里有两个链接可以帮助您入门。

相关的StackOverflow问题: AJAX in Chrome sending OPTIONS instead of GET/POST/PUT/DELETE?

这似乎是how to configure CORS properly if you are using ASP.NET WebAPI 2上的一个有用的页面。

哦,我假设如果飞行前请求失败,Chrome将不会执行正确的CORS请求。我在快速研究中没有看到任何地方确认或否认,但这对我来说是合乎逻辑的,因为飞行前请求的重点是找出服务器支持哪种CORS请求,或者它是否得到支持。