Web API通过URL加载,但从Angular脚本获取错误404

时间:2014-05-01 20:43:46

标签: angularjs asp.net-web-api

我在这里有一个WebAPI方法:

http://localhost:50463/api/movies

当从浏览器访问它时,它会完全加载。

在我的项目(与Web API所在的项目相同)从AngularJS调用方法时,我收到错误500:

  

无法加载资源:服务器响应状态为500(内部服务器错误)

当我点击错误中的链接时,它会完美地加载数据。

WebAPI的路由如下:

config.Routes.MapHttpRoute("DefaultApiGet", "Api/{controller}", 
    new {action = "Get"}, 
    new {httpMethod = new HttpMethodConstraint(HttpMethod.Get)}
);

这是角度调用

app.factory('dataFactory', function ($http) {

    var factory = {};

    factory.data = function (callback) {
        $http.get('/api/movies').success(callback);
    };

    return factory;
});

我添加了这个javascript只是为了排除角度,我得到了同样的结果:

$.ajax({
url: "/api/movies",
type: 'GET',
//data: "{ 'ID': " + id + "}",
contentType: "application/json; charset=utf-8",
success: function(data) {
    alert(data);
},
error: function (xhr, ajaxOptions, thrownError) {
    alert(thrownError);
}
});

知道我做错了吗?

2 个答案:

答案 0 :(得分:0)

我假设您的Web API和AngularJS应用程序在不同的端口上运行。在这种情况下,您正在Same-Origin-Policy问题中运行。

确保您的Web API使用HTTP CORS标头进行响应,例如:

Access-Control-Allow-Origin: http://<angular_domain>:<angular_port>

Access-Control-Allow-Origin: *

答案 1 :(得分:0)

在我的$ .ajax()请求中使用相对网址时,对我来说看起来不像是一个CORS问题。

您是否尝试过$.getJSON("/api/movies").then(successHandler, faulureHandler)

不确定这会有所帮助,但对于正在发送带有不包含内容的GET请求的contentType标头的人。应该有一个Accept标头,但WebAPI应该没有一个。

我还会从路由中删除约束并恢复到默认路由映射,以查看问题是否存在。

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