后台是c# mvc api
前台是jquery
直接使用$.post 无法向api传递参数,需要做些处理后台才能正常接收
后台代码:
[HttpPost]
[Route("frame/RoleSetRight")]
public object RoleSetRight([FromBody]JObject para)
{
try
{
List<string> rtmp = new List<string>();
foreach(JToken item in para["rids"].ToArray())
{
rtmp.Add(item.ToString());
}
string[] rids = rtmp.ToArray();
int id = int.Parse(para["id"].ToString());
.....
return Common.Msg(EnumState.ok);
}
catch (Exception e)
{
return Common.Msg(EnumState.err, e.Message);
}
}
参数需要使用[FromBody],并且只能有一个参数,这里用NewTonSoft的Jobject来接收,然后再组织成自己需要的参数形式。
前台js:
var p = { id: $('#role_id').val(), rids: ids };
//var para = $.param(p, true);
var para = JSON.stringify(p);
//$.post('/Frame/RoleSetRight', para, function (data) {
// accecpResult(data, function () {
// window.parent.roleRightHasSub();
// });
//})
$.ajax({
type: 'post',
data: para,
url: '/frame/rolesetright',
contentType: 'application/json',
success: function (response) {
accecpResult(response, function () {
window.parent.roleRightHasSub();
});
}
})
注释部分是向普通controller的action传递数组参数的方法,对api来说不管用了,需要用ajax来,并且contentType需设置成’application/json’才可以,参数使用JSON.stringify()来组织一下