我有一份申请突然停止工作。我无法确定为什么这是我所知道的应该起作用的原因。我一定是错过了一些很简单的东西。这是代码,角代码调用API,API方法得到调用,但是方法的参数总是为空。呼叫是一个PUT呼叫。
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 }
);
}这是我的路线,以防出问题。但我不认为是这样的,因为方法确实被调用了,所以参数不会被传入。
[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的用户控制器,这里没什么特别之处。取消删除方法确实会被调用,但长?值参数始终为空。
(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]);
}());这是我的控制器,再次非常简单,我不认为这里的任何东西是坏的,但我包括它的完整性。
(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,我尝试使用双引号和单引号,没有引号--似乎没有什么工作。
任何帮助都将不胜感激。谢谢。
发布于 2015-04-21 18:19:41
您正在通过消息体而不是Uri传递数据(在本例中为值)。默认情况下,Web将查询字符串参数的URI序列化为特定方法上的变量,而不是主体。
更改角度调用,通过"params“属性和"data”参数将值参数发送到$http。注意,我将其重构为一个配置对象,以传递到$http中,以使其更清晰。
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;
});
};https://stackoverflow.com/questions/29775982
复制相似问题