C# Web Api 2-如何从$http调用向控制器发送属性(属性路由)

C# Web Api 2-如何从$http调用向控制器发送属性(属性路由),c#,javascript,angularjs,url-routing,asp.net-web-api2,C#,Javascript,Angularjs,Url Routing,Asp.net Web Api2,我有一个$http呼叫: $http({ method: 'GET', url: '/api/PhotoSubmit/GetCategories', accept: 'application/json' }) .success(function (result) { $scope.categories = result; }); 。。。需要将参数发送到此HTTPGET方法: [Rou

我有一个$http呼叫:

$http({
        method: 'GET',
        url: '/api/PhotoSubmit/GetCategories',
        accept: 'application/json'
    })
        .success(function (result) {
            $scope.categories = result;
        });
。。。需要将参数发送到此HTTPGET方法:

[Route("api/PhotoSubmit/GetCategories/{id}")]
    [HttpGet]
    public object GetCategories(int id)
    {
        return FileServices.GetCategoriesForUser().Select(c => new { Id = c.Id, Name = c.Name });
    }
这个路由是有效的,我只是不知道如何通过angular/javascript访问它以将其发送到控制器(或者…路由调用在$http调用中应该是什么样子)

这是URL:

http://localhost:63203/Index.html#/photosubmit/1

Id可以通过url本身传递

url: '/api/PhotoSubmit/GetCategories/1',
或者你也可以在params中传递这个

$http({
    url: '/api/PhotoSubmit/GetCategories', 
    method: "GET",
    params: {id: 1}
 });

我确信$http是类似的,但我正在工厂中使用$resource来访问我的web api端点


在services.js中,我有:

然后在我的控制器中,我用

$scope.categories = api.Categories.get({id:"1"});
如果你真的想开始玩得开心,你可以等待结果出来后使用$PROMITE使用数据

api.Categories.get({id:"1"})
    .$promise
    .then(function (results){
        $scope.categories = results;
    });

更新: 要将变量放入$routeParams中,我将执行以下操作(请记住,这是我的第一个angular应用程序,因此有更好的方法来编写代码。)

在我的app.config中,我有以下代码来创建id参数:

$routeProvider
    ...
    .when('photosubmit/:id', {
        templateUrl: "photo.html",
        controller: "PhotoController"
    })
    .otherwise({ redirectTo: '/' });
然后,我在控制器
$scope.$routeParams=$routeParams;

我必须在顶部执行此操作,以免丢失或未定义


接下来,您可以使用
$scope.$routeParams.id

访问您在路由中创建的变量。您的javascript url没有基(
localhost:63203
)或者一个参数hmmm。不确定您在这里的意思…但是…有一件事…当您键入params:id:1时,您如何从url或路由获取param?params在http调用的请求参数中发送这些参数。控制器代表这些名称从请求参数中提取值。嗯..我就快到了:)但是。。。这对我来说仍然是“未知领域”…)我得到了对象{$id=“1”,returnData=7}“NetworkError:400错误请求-”。。。当我注入routeParams并使用时:var photoId=$routeParams.id;好。。我快到了:)但是。。。这对我来说仍然是“未知领域”…)我得到了对象{$id=“1”,returnData=7}“NetworkError:400错误请求-”。。。当我注入routeParams并使用时:var photoId=$routeParams.id;所以当url看起来像这样时,我仍然无法完全理解如何获取参数:它是否“神奇地”理解这是“id”?以及。。似乎这是不正确的,因为出现了“双id”错误:url:“/api/PhotoSubmit/GetCategories/:id”,如果将id:1作为参数传递,它将在字符串末尾显示为?id=1。这就是为什么我使用变量:id并在代码中分配它。至于从url获取参数,当有人转到photosubmit/1时,您是否希望对photosubmit/getcategories/1进行api调用?您必须使用路由将其分配给变量。我会更新我的答案。
$routeProvider
    ...
    .when('photosubmit/:id', {
        templateUrl: "photo.html",
        controller: "PhotoController"
    })
    .otherwise({ redirectTo: '/' });