Angular& ASP.NET MVC - 当我将参数传递给后端Controller时,参数为null

时间:2015-08-27 22:58:18

标签: javascript c# asp.net angularjs asp.net-mvc

如果查看我的ASP.NET MVC Controller clientId的参数,它总是为空。

唯一可以让它不为空并且实际成功传递数据的方法就是创建一个类...但是这很繁琐,我无法为每个后端函数创建一个类让它发挥作用。

有没有办法成功传递数据而不创建类?

感谢您的帮助

Angular Factory

PlaylistsFactory.getUsersForClient = function (clientId) {
return $http({
    method: 'POST',
    url: '/Show/GetUsersForClient',
    data: JSON.stringify(clientId)
  });
};

角度控制器

PlaylistsFactory.getUsersForClient(clientId)
  .success(function (userList) {
    console.log('success!');
  });

ASP.NET MVC控制器

public JsonResult GetUsersForClient(string clientId)  //clientId is always null unless i create an object
{
  ...
}

2 个答案:

答案 0 :(得分:2)

尝试使您的JSON参数与C#参数的名称匹配,并将其作为JSON包含在数据有效内容中:

return $http({
    method: 'POST',
    url: '/Show/GetUsersForClient',
    data: {clientId: JSON.stringify(clientId)}
  });
};

答案 1 :(得分:0)

我建议您遵循RESTful API的规则。

这意味着你应该使用HTTP动词,如GET(获取数据),POST(更新数据),PUT(创建数据),DELETE(删除数据)。见http://www.tutorialsteacher.com/mvc/actionverbs-in-mvc

然后,您还可以将要传递的参数添加到API的路线中:/Show/GetUsersForClient/{clientId}。见http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx

在这种情况下,您可以解除在MVC控制器端没有ViewModel的情况下在正文中发送数据的问题。

如果要继续使用解决方案,请在发送之前尝试创建对象:

PlaylistsFactory.getUsersForClient = function (clientId) {
var payload = { clientId: clientId }   
return $http({
          method: 'POST',
          url: '/Show/GetUsersForClient',
          data: payload
       });
};

当请求标头中的内容类型是text / plain或application / json时,MVC / WebAPI有时也会出现阻塞。例如:当以text / plain发送时,.Net将无法正确识别json对象。