我在特定请求中遇到Access-Control-Allow-Origin
错误,但控制器是按照其他控制器的相同逻辑构建的,此错误不会发生。
使用Acces-Control-Allow-Origin请求标头
请求没有Acces-Control-Allow-Origin的标头
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 }
);
}
}
我做错了什么或遗失了什么?
答案 0 :(得分:0)
MetaTimeController.GetListMetasTime()
正在返回500 Internal Server Error
,因此,您甚至无法收回您期望的回复。
查看响应的主体,如果它只是没有添加CORS标头,你仍然会看到正确的数据;但是,你的人会说有一个错误。你的控制器甚至没有机会添加标题,因为它出错了。
找出导致服务器错误的原因,并且,一旦您能够返回200 OK
响应,您就会注意到标头正在运行。