我有一个WebApi控制器和一个使用ajax来调用该视图的视图。
直到昨天一切都运行良好,但现在,我运行了项目,传输的数据被截断。 这是一个例子:
这是我的AjAx电话:
var data = JSON.stringify(aoData);
oSettings.jqXHR = $.ajax({
"dataType": 'json',
"type": "POST",
"url": sSource,
"data": data,
"success": fnCallback,
"contentType": 'application/json'
});
这是我的控制器:
public object GetAllProductsForDataTable(DataTableRequestItem[] pRequest)
{
...
}
发送前的数据是正确的。它已经完成,但是我的控制器在参数上收到一个NULL值,所以,我检查了收到的Request数据,发现json字符串被截断了。 通过从控制器调用 Request.Content.ReadAsStringAsync()。Result ,我得到的是这样的东西:
alue\":false},{\"name\":\"bSearchable_5\",\"value\":true}
实际的JSON值要长得多,但这只是它的开始,所以你可以看到它被截断了。
检查值的长度是1393,所以我认为它的长度可能有些问题,但无法弄明白。
更新
检查截断值的长度,我看到的是369 ... 这应该给出一些提示,因为对象的总长度减去读取值的总长度...是1024 ...
必须要从char 1024
中读取请求更新2
我更改Controller Action以接收HttpRequestMessage而不是我的对象,并使用ReadAsStringAsync()更改Result.Result返回FULL字符串。 我猜测MVC正在做的参数绑定存在一些错误。
答案 0 :(得分:0)
即使“客户端”部分根本不一样(没有Ajax,但有kt / Android调用),我也遇到了同样的问题,并且我确认此代码的结果给出了一个截断的字符串:
[HttpPost]
[BasicAuthentication]
public HttpResponseMessage Send([FromBody]string json)
{
string str = Request.Content.ReadAsStringAsync().Result;
return Request.CreateResponse(HttpStatusCode.OK);
}
以下代码返回完整的字符串
[HttpPost]
[BasicAuthentication]
public HttpResponseMessage Send(HttpRequestMessage req)
{
string str = req.Content.ReadAsStringAsync().Result;
return Request.CreateResponse(HttpStatusCode.OK);
}