Allow-Control-Allow-Origin在特定控制器中

时间:2015-08-03 14:01:03

标签: c# angularjs ionic

我在特定请求中遇到Access-Control-Allow-Origin错误,但控制器是按照其他控制器的相同逻辑构建的,此错误不会发生。

使用Acces-Control-Allow-Origin请求标头

enter image description here

请求没有Acces-Control-Allow-Origin的标头

enter image description here

JS

function MyGoalsCtrl($scope, $http) {
    $scope.loadMore = function() {
        var responsePromise = $http.get("http://localhost:57907/api/Meta/GetListMetas");

        responsePromise.success(function(data, status, headers, config) {                
            $scope.metas = data;
        });
        responsePromise.error(function(data, status, headers, config) {
            alert("AJAX failed!");
        });
    }; 
}

function TeamGoalsCtrl($scope, $http) {
    $scope.loadMore = function () {       
        var responsePromise = $http.get("http://localhost:57907/api/MetaTime/GetListMetasTime");

        responsePromise.success(function (data, status, headers, config) {                            
            $scope.metas = data;
        });

        responsePromise.error(function (data, status, headers, config) {
            alert("AJAX failed!");
        });
    };    
}

angular
    .module('starter.controllers')
    .controller('MyGoalsCtrl', MyGoalsCtrl)
    .controller('TeamGoalsCtrl', TeamGoalsCtrl);

MyGoalsCtrl中使用的Web API MetaController

[EnableCors(origins: "*", headers: "*", methods: "*")]
public class MetaController : ApiController
{
    public FastGoalDataStructure GetListMetas()
    {            
        var metas = GoalDataSingleton.Instance.GoalData;
        return metas;
    }
}

TeamGoalsCtrl中使用的Web API MetaController

[EnableCors(origins: "*", headers: "*", methods: "*")]
public class MetaTimeController : ApiController
{
    public FastGoalDataStructure GetListMetasTime()
    {
        var metas = SelectAreaMembers();
        return metas;
    }
}

我的Web API配置

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        config.EnableCors();

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

我做错了什么或遗失了什么?

1 个答案:

答案 0 :(得分:0)

MetaTimeController.GetListMetasTime()正在返回500 Internal Server Error,因此,您甚至无法收回您期望的回复。

查看响应的主体,如果它只是没有添加CORS标头,你仍然会看到正确的数据;但是,你的人会说有一个错误。你的控制器甚至没有机会添加标题,因为它出错了。

找出导致服务器错误的原因,并且,一旦您能够返回200 OK响应,您就会注意到标头正在运行。