Request.Result 中的字符串在 MVC 5 中被截断
Posted
技术标签:
【中文标题】Request.Result 中的字符串在 MVC 5 中被截断【英文标题】:string in Request.Result is Truncated in MVC 5 【发布时间】:2014-08-20 03:37:45 【问题描述】:我有一个 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 值,所以我检查了收到的请求数据,发现 json 字符串被截断了。 我通过从控制器调用 Request.Content.ReadAsStringAsync().Result 得到这样的结果:
alue\":false,\"name\":\"bSearchable_5\",\"value\":true
实际的 JSON 值要长得多,但这只是它的开始,因此您可以看到它被截断了。
检查值的长度是 1393,所以我认为它的长度可能有问题,但无法弄清楚。
更新
检查截断值的长度,我看到是 369... 这应该给出一些提示,因为对象的总长度减去读取值的总长度......是 1024......
一定有什么东西在发出从 char 1024 读取的请求
更新 2
我将控制器操作更改为接收 HttpRequestMessage 而不是我的对象,并且使用 ReadAsStringAsync().Result 的结果返回 FULL 字符串。 我猜 MVC 正在做的参数绑定有问题。
【问题讨论】:
【参考方案1】:只有当我提供无法反序列化为控制器方法参数类型的 JSON 时,我才能重现此问题。如果Json无法解析成参数类型,调用Request.Content.ReadAsStringAsync()
时会截断payload的前1024个字符
在您的情况下,这意味着发送给您的 api 的 Json 与 DataTableRequestItem[]
不匹配。您应该仔细检查您发送的 JSON。
要弄清楚你的错误是什么,你应该检查你的控制器的ModelState
。 ModelState.IsValid
可能返回 false。您可以在ModelState.Values
中看到错误。
如果您希望在任何 api 控制器上提供无效 JSON 而不到达控制器方法时返回 BadRequest,您可以添加 ActionFilterAttribute
,如 in this Microsoft documentation 所述。这将确保您的客户端收到正确的错误消息,并防止长时间调试会话以了解晦涩的行为。
【讨论】:
【参考方案2】:即使“客户端”部分完全不同(没有 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);
【讨论】:
知道为什么会这样吗?不得不这样做似乎是一种肮脏的解决方法以上是关于Request.Result 中的字符串在 MVC 5 中被截断的主要内容,如果未能解决你的问题,请参考以下文章