在我的api控制器中,我需要传递两个参数:一个整数+一个字符串。这个字符串是一个json变量,所以它是一个非常长的字符串,我不能作为URL的一部分传递。
我尝试将其作为POST参数传递(在ajax调用的data属性中),但是我收到一个错误:只读取了第一个参数,因此传递的URL不是正确的。
我该怎么做?
修改
JS代码:
function SavingFloor(FloorId, Json) {
$.ajax({
beforeSend: function (xhr) {
xhr.setRequestHeader('verifySession', verifySession());
xhr.setRequestHeader('Authorization', '@HttpContext.Current.Session["BaseAuth"]');
},
url: "/api/Floor/SaveFloor?FloorID=" + FloorId, //api: error in decoding json (the json can't be passed as parameter)
type: "POST",
data: {
jsonstring: Json
},
dataType: 'text/html',
success: function (data) {
alert('success');
}
});
}
控制器:
[HttpPost]
public void SaveFloor(int floorID, string jsonstring)
{
Floor floor = db.FloorSet.Find(floorID);
JavaScriptSerializer ser = new JavaScriptSerializer();
Dictionary<string, object> dict = ser.Deserialize<Dictionary<string, object>>(jsonstring);
floor.SavedJson = jsonstring;
floorRepository.Update(floor);
floorRepository.Save();
}
答案 0 :(得分:2)
您可以尝试将[FromUri]
和[FromBody]
属性添加到SaveFloor
方法。您可以定期GET
发送floorID,并将长jsonstring
作为POST
正文发送。目前,Web API只能从POST
正文中读取单个参数。您需要将两个变量封装在单个对象中,或者尝试:
public void SaveFloor([FromUri]int floorID, string jsonstring)
您无需将[FromBody]
指定为jsonstring
,因为它是POST
请求中的默认值。
在此之后,请不要忘记更改客户端代码,以便在查询字符串中发送floorID
。