今天在测试一个列表的时候,把列表的分页大小设置为 200 条,在翻页的时候发出获取数据出错了,提示 JSON PARSER 错误,把输出到客户端的内容贴出来一看,发现内容全乱了,刚才开始以为是 Newtonsoft.Json 组件的 BUG, 经过调试,发现输出的内容是正常的,内容通过 Newtonsoft.Json 组件把一个 DataTable 转换成 json 格式的。
我没有使用 mvc, 自己写了一个 middleware 来处理客户端的请求,
直接
context.Response.ContentLength = System.Text.Encoding.UTF8.GetBytes(s).Length;
return context.Response.WriteAsync(s, System.Text.Encoding.UTF8);
加不加 ContentLength 都会出问题,搞了好久也没有搞定,不知道是什么原因,如果内容少一点好像就没有发现这个问题。
使用 iisexpress 做的测试
上面一行是正确的,下面一行,到管理员后面的字符就变了。。。
麻烦把完整的json发哈。
前端、后端期待的 json。
前端、后端目前实际得到的 json
这样大家方便帮你找问题哦
建议试试下面的代码
var jsonResult = new JsonResult(s);
var actionConetext = new ActionContext(context, new RouteData(), new ActionDescriptor());
await jsonResult.ExecuteResultAsync(actionConetext);
之前也是想使用这种方式来实现, 因为没有添加 mvc 相关的代码,所以调用这个发现会有很多问题
@匡匡: 我写代码验证过,只要在 Startup.ConfigureServices 添加下面的代码
services.AddMvc();
把之前的 context.Response.WriteAsync 替换成 context.Response.Body.WriteAsync 就可以了:
var bytes = System.Text.Encoding.UTF8.GetBytes(s);
return context.Response.Body.WriteAsync(bytes, 0, bytes.Length);