如果查看我的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
{
...
}
答案 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对象。