Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 在控制器上找不到与AngularJS和Asp.Net WebApi请求匹配的操作_Ajax_Angularjs_Asp.net Web Api2_Asp.net Web Api Routing - Fatal编程技术网

Ajax 在控制器上找不到与AngularJS和Asp.Net WebApi请求匹配的操作

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

我的头冒烟了。我正在用Asp.NETWebAPI学习AnjularJS。我有以下AnjularJS控制器,它具有对Web Api服务的ajax调用,如下所示

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)