在控制器上找不到与来自 AngularJS 和 Asp.Net WebApi 的请求相匹配的操作
No action was found on the controller that matches the request from AngularJS and Asp.Net WebApi
我头上冒烟了。我正在使用 Asp.Net Web Api 学习 AnjularJS。我有以下 AnjularJS 控制器,它有一个 ajax 调用 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;
});
}
和网页api操作方法如下
[HttpGet]
[HttpPost]
public int SumNumbers(int first, int second)
{
return first + second;
}
我什至在 web 配置中有一个路由 api 如下教程中的建议。
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 Controller 中,您需要在 URL:
中传递参数
url: '/api/bindings/sumnumbers/' + first + '/' + second
这应该适合你。我还强烈建议使用像 Fiddler 这样的工具来测试您的 WEB API 方法,然后再使用 Angular.
进行测试
刚刚找到,而不是
data: $httpParamSerializer(dataTemp),
在 ajax 调用中,您可以简单地使用
params: dataTemp,
然后在这种情况下,您不需要为操作方法添加路由属性,并且建议 keithm 为参数添加 FromUi 属性。
我头上冒烟了。我正在使用 Asp.Net Web Api 学习 AnjularJS。我有以下 AnjularJS 控制器,它有一个 ajax 调用 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;
});
}
和网页api操作方法如下
[HttpGet]
[HttpPost]
public int SumNumbers(int first, int second)
{
return first + second;
}
我什至在 web 配置中有一个路由 api 如下教程中的建议。
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 Controller 中,您需要在 URL:
中传递参数url: '/api/bindings/sumnumbers/' + first + '/' + second
这应该适合你。我还强烈建议使用像 Fiddler 这样的工具来测试您的 WEB API 方法,然后再使用 Angular.
进行测试刚刚找到,而不是
data: $httpParamSerializer(dataTemp),
在 ajax 调用中,您可以简单地使用
params: dataTemp,
然后在这种情况下,您不需要为操作方法添加路由属性,并且建议 keithm 为参数添加 FromUi 属性。