首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angularjs和WebAPI方法参数总是零

Angularjs和WebAPI方法参数总是零
EN

Stack Overflow用户
提问于 2015-04-21 15:01:57
回答 1查看 3.9K关注 0票数 4

我有一份申请突然停止工作。我无法确定为什么这是我所知道的应该起作用的原因。我一定是错过了一些很简单的东西。这是代码,角代码调用API,API方法得到调用,但是方法的参数总是为空。呼叫是一个PUT呼叫。

代码语言:javascript
复制
public static void Register(HttpConfiguration config)
{
    // Web API configuration and services

    // Web API routes
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{value}",
        defaults: new { value = RouteParameter.Optional }
    );
}

这是我的路线,以防出问题。但我不认为是这样的,因为方法确实被调用了,所以参数不会被传入。

代码语言:javascript
复制
[Authorize]
public class UsersController : ApiController
{
    // PUT api/users/undelete
    [HttpPut]
    public void Undelete(long? value)
    {
        if (!value.HasValue)
        {
            throw new ArgumentNullException("[UsersController => Undelete(long? value)]");
        }

        new UsersBoundary(this.repository).UndeleteUser(value.Value);
    }

    public UsersController(IUsersRepository repository)
    {
        this.repository = repository;
    }

    public UsersController() : this(new UsersRepository()) {  }

    private readonly IUsersRepository repository;
}

这是WebAPI的用户控制器,这里没什么特别之处。取消删除方法确实会被调用,但长?值参数始终为空。

代码语言:javascript
复制
(function () {
    'use strict';

    var app = angular.module('adminpowertools');

    var HomeController = function ($scope, homeService) {

        $scope.searchString = '';
        $scope.currentPage = 1;

        $scope.undelete = function(user) {
            homeService.undeleteUser(user.recordId);
            angular.forEach($scope.users, function(value, key) {
                if (value.recordId === user.recordId) {
                    value.deleted = 0;
                }
            });
        };
    };

    app.controller('HomeController', ['$scope', 'HomeService', HomeController]);

}());

这是我的控制器,再次非常简单,我不认为这里的任何东西是坏的,但我包括它的完整性。

代码语言:javascript
复制
(function () {
    'use strict';

    var app = angular.module('adminpowertools');

    var HomeService = function ($http) {

        var undeleteUser = function(userId) {
            var uri = 'api/users/undelete';
            var data = { value: userId };

            return $http.put(uri, JSON.stringify(data)).success(function(data, status, headers, config) {
                return true;
            });
        };

        return {
            undeleteUser: undeleteUser
        };
    };

    app.factory('HomeService', ['$http', HomeService]);
}());

这是调用控制器的服务。同样,它确实调用了控制器,只是没有传入在数据变量中设置的值。我尝试过将数据设置为'value=‘+ userId,我尝试使用双引号和单引号,没有引号--似乎没有什么工作。

任何帮助都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-21 18:19:41

您正在通过消息体而不是Uri传递数据(在本例中为值)。默认情况下,Web将查询字符串参数的URI序列化为特定方法上的变量,而不是主体。

更改角度调用,通过"params“属性和"data”参数将值参数发送到$http。注意,我将其重构为一个配置对象,以传递到$http中,以使其更清晰。

代码语言:javascript
复制
var undeleteUser = function(userId) {
        var config = {
            method: 'PUT',
            url: 'api/users/undelete',
            params: { value: userId }
        };            

        return $http(config).success(function(data, status, headers, config) {
            return true;
        });
    };
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29775982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档