【问题标题】:Web Api 2 - How to send attribute from $http call to controller (attribute routing)Web Api 2 - 如何将属性从 $http 调用发送到控制器(属性路由)
【发布时间】:2014-07-24 14:03:32
【问题描述】:

我有这个 $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 调用中应该是什么样子

这是网址:

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

【问题讨论】:

  • 您的 javascript 网址没有基础 (localhost:63203) 或参数
  • 嗯。不知道你在这里的意思..?

标签: c# javascript angularjs url-routing asp.net-web-api2


【解决方案1】:

我确定 $http 是类似的,但我在工厂中使用 $resource 来访问我的 Web api 端点。


services.js 中,我有:

var app = angular.module('app.service', ['ngResource']);

app.factory('api', ['$resource', function ($resource) {
'use strict';
return {
    Categories: $resource('/api/PhotoSubmit/GetCategories/:id', {id: '@id'})
    };
}]);

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

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

如果您真的想开始玩得开心,您可以等待并在结果返回后使用 $promise 使用数据。

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访问您在路由中创建的变量

【讨论】:

  • 嗯..我快到了 :) 但是...这对我来说仍然是“未知领域”.. :) 我得到 Object { $id="1", returnData= 7} "NetworkError: 400 Bad Request - localhost:63203/api/PhotoSubmit/GetCategories/:id?id=1" ...当我注入 routeParams 并使用:var photoId = $routeParams.id;
  • 所以......我仍然不完全理解当 url 看起来像这样时我如何获取参数:localhost:63203/Index.html#/photosubmit/1 它“神奇地”理解这是“id”吗?
  • 和.. 由于“双重 id”错误,这似乎是不正确的:url: '/api/PhotoSubmit/GetCategories/:id',
  • 如果您将 ID:1 作为参数传递,它将在字符串末尾显示为 ?id=1。这就是我使用变量 :id 并在代码中分配它的原因。至于从 url 获取参数,当有人去 photosubmit/1 时,你想对 photosubmit/getcategories/1 进行 api 调用?您必须使用路由将其分配给变量。我会更新我的答案。
【解决方案2】:

Id 可以通过 url 本身传递。

url: '/api/PhotoSubmit/GetCategories/1',

或者你也可以在参数中传递它。

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

【讨论】:

  • 但是......有一件事......当你输入params:id:1时,你如何从url或路由中获取参数?
  • params 在 http 调用的请求参数中发送这些参数。控制器代表那里的名称从请求参数中提取值。
  • 嗯..我快到了 :) 但是...这对我来说仍然是“未知领域”.. :) 我得到 Object { $id="1", returnData= 7} "NetworkError: 400 Bad Request - localhost:63203/api/PhotoSubmit/GetCategories/:id?id=1" ...当我注入 routeParams 并使用时:var photoId = $routeParams.id;
猜你喜欢
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 2014-05-28
  • 2021-08-12
  • 2015-02-27
  • 1970-01-01
相关资源
最近更新 更多