Ajax 在控制器上找不到与AngularJS和Asp.Net WebApi请求匹配的操作
我的头冒烟了。我正在用Asp.NETWebAPI学习AnjularJS。我有以下AnjularJS控制器,它具有对Web Api服务的ajax调用,如下所示Ajax 在控制器上找不到与AngularJS和Asp.Net WebApi请求匹配的操作,ajax,angularjs,asp.net-web-api2,asp.net-web-api-routing,Ajax,Angularjs,Asp.net Web Api2,Asp.net Web Api Routing,我的头冒烟了。我正在用Asp.NETWebAPI学习AnjularJS。我有以下AnjularJS控制器,它具有对Web Api服务的ajax调用,如下所示 CustomerController = function ($http, $scope, $httpParamSerializer) { $scope.modelObject = { first: 2, second: 3 }; $scope.modelObject.sendRequest = functio
CustomerController = function ($http, $scope, $httpParamSerializer) {
$scope.modelObject = { first: 2, second: 3 };
$scope.modelObject.sendRequest = function (requestType) {
var dataTemp = {first:2, second:3 };
alert( $httpParamSerializer(dataTemp));
$http({
method: 'GET',
url: '/api/bindings/sumnumbers',
data: $httpParamSerializer(dataTemp),
headers: { 'Content-Type': 'application/json' }
}
).then(function successCallback(response) {
$scope.modelObject.result = response.data;
}, function errorCallback(response) {
alert(response.data);
$scope.modelObject.result = response;
});
}
[HttpGet]
[HttpPost]
public int SumNumbers(int first, int second)
{
return first + second;
}
web api操作方法如下所示
CustomerController = function ($http, $scope, $httpParamSerializer) {
$scope.modelObject = { first: 2, second: 3 };
$scope.modelObject.sendRequest = function (requestType) {
var dataTemp = {first:2, second:3 };
alert( $httpParamSerializer(dataTemp));
$http({
method: 'GET',
url: '/api/bindings/sumnumbers',
data: $httpParamSerializer(dataTemp),
headers: { 'Content-Type': 'application/json' }
}
).then(function successCallback(response) {
$scope.modelObject.result = response.data;
}, function errorCallback(response) {
alert(response.data);
$scope.modelObject.result = response;
});
}
[HttpGet]
[HttpPost]
public int SumNumbers(int first, int second)
{
return first + second;
}
我甚至在WebConfigforWebAPI中有一个路由,如教程中建议的那样
config.Routes.MapHttpRoute(
name: "Binding Example Route",
routeTemplate: "api/{controller}/{action}/{first}/{second}"
);
但是我得到了以下错误
{"data":{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:29845/api/bindings/sumnumbers'.","MessageDetail":"No action was found on the controller 'Bindings' that matches the request."},"status":404,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"url":"/api/bindings/sumnumbers","data":"first=2&second=3","headers":{"Content-Type":"application/json","Accept":"application/json, text/plain, */*"}},"statusText":"Not Found"}
有谁能告诉我出了什么问题吗?我建议使用属性路由来简化操作。您可以将WEB API方法更改为:
[HttpGet]
[Route("api/bindings/sumnumbers/{first}/{second}")]
public int SumNumbers([FromUri] int first, [FromUri] int second)
{
return first + second;
}
在Angular JS控制器中,您需要在URL中传递参数:
url:'/api/bindings/sumnumbers/'+first+'/'+second
这应该对你有用。我还强烈建议在使用Angular尝试WEB API方法之前,使用Fiddler之类的工具来测试这些方法。刚刚找到,而不是
data: $httpParamSerializer(dataTemp),
在ajax调用中,您只需
params: dataTemp,
在这种情况下,您不需要为操作方法设置route属性,为Keith建议的参数设置FromUi属性。如果属性routing不是选项,该怎么办?(即:我正在使用WebAPI 1.0)