我在这里有一个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);
}
});
知道我做错了吗?
答案 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});