Angular http.get + WebApi = Cors失败

时间:2016-10-06 17:21:12

标签: angularjs cors asp.net-web-api2

在服务器端我有一个C#web api,包括一个在类级别上归属的控制器:



[EnableCors(origins: "http://localhost:51664,http://localhost,...", headers: "*", methods: "*")]




我可以进行ajax调用,例如形成localhost就好了。

现在我开始使用AngularJS,http.get-method失败,并显示以下消息:

XMLHttpRequest无法加载http://localhost:8081/DividendsManager.Web.Api/api/securities/GetSecurities?yearsDividendsDontDecrease=40。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' null'因此不允许访问。

这是我的AngularJS代码:



    <script>
        var myApp = angular.module('myApp', []);

        myApp.controller("myController", function($scope, $http) {

            var onSuccess = function(data, status, headers, config) {
                $scope.data = data;
            };

            var onError = function(data, status, headers, config) {
                $scope.error = status;
            }

            var promise = $http.get("http://localhost:8081/DividendsManager.Web.Api/api/securities/GetSecurities?yearsDividendsDontDecrease=40");

            promise.success(onSuccess);
            promise.error(onError);
        });
</script>
&#13;
&#13;
&#13;

在Fiddler,我可以看到,AngularJS-HTTP-Get请求的标题有一个&#34; Origin:null&#34;入口,这似乎与问题有关。我认为,如果相反&#34; null&#34;价值将是&#34; http://localhost&#34;,它应该有用。

任何人都可以帮助我吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

可能是因为在您的[EnableCors]属性中,您需要将headers: "", methods: ""更改为headers: "*", methods: "*"吗?

此外,您不应在origins网址的末尾添加正斜杠(如果您这样做)。

答案 1 :(得分:0)

我们在项目中遇到了同样的问题,我们根据各种网站的建议尝试了很多选项。但在我们的案例中工作/工作的事情是编写自定义CORS提供程序here

答案 2 :(得分:0)

Upppps!

今天在新鲜空气中奔跑时,我突然意识到为什么Origin无效。是的,因为我没有在IIS中调用网站,而是直接在文件系统中打开文件。当然,这样做时没有有效的URL,并且Web服务器的Origin为null。