首页 新闻 会员 周边

.net core3, 服务端输出的内容和客户端获取到的内容不一样

0
悬赏园豆:50 [待解决问题]

今天在测试一个列表的时候,把列表的分页大小设置为 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 做的测试

上面一行是正确的,下面一行,到管理员后面的字符就变了。。。

匡匡的主页 匡匡 | 初学一级 | 园豆:51
提问于:2019-11-21 12:00
< >
分享
所有回答(3)
0

麻烦把完整的json发哈。

前端、后端期待的 json。

前端、后端目前实际得到的 json

这样大家方便帮你找问题哦

小小高 | 园豆:1095 (小虾三级) | 2019-11-21 12:18
0

建议试试下面的代码

var jsonResult = new JsonResult(s);
var actionConetext = new ActionContext(context, new RouteData(), new ActionDescriptor());
await jsonResult.ExecuteResultAsync(actionConetext);
dudu | 园豆:30994 (高人七级) | 2019-11-21 15:02

之前也是想使用这种方式来实现, 因为没有添加 mvc 相关的代码,所以调用这个发现会有很多问题

支持(0) 反对(0) 匡匡 | 园豆:51 (初学一级) | 2019-11-22 09:13

@匡匡: 我写代码验证过,只要在 Startup.ConfigureServices 添加下面的代码

services.AddMvc();
支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2019-11-22 09:32
1

把之前的 context.Response.WriteAsync 替换成 context.Response.Body.WriteAsync 就可以了:

var bytes = System.Text.Encoding.UTF8.GetBytes(s);
return context.Response.Body.WriteAsync(bytes, 0, bytes.Length);

匡匡 | 园豆:51 (初学一级) | 2019-11-22 09:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册