[英]Failing to pass a very long string as parameter in an ajax call to an asp.net controller
在我的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();
}
您可以尝试将[FromUri]
和[FromBody]
属性添加到SaveFloor
方法。 您可以使用常规GET
发送floorID并将长jsonstring
作为POST
正文发送。 当前,Web API只能从POST
正文读取单个参数。 您需要将两个变量封装在一个对象中,或尝试执行以下操作:
public void SaveFloor([FromUri]int floorID, string jsonstring)
你并不需要指定[FromBody]
以jsonstring
,因为它是在默认的POST
请求。 此后,不要忘记更改客户端代码以在查询字符串中发送floorID
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.