c# - ASP.NET web api 2 截断 json 响应
问题描述
我的 API 调用遇到了一个非常奇怪的间歇性问题。有时响应会被截断。
- 没有关于如何或何时截断的模式。
- 响应大小为 200kb,配置的响应限制为 20mb。
格式化程序配置:
private static HttpConfiguration ConfigureFormatters(this HttpConfiguration config)
{
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
return config;
}
简化的 API 调用:
[HttpGet, Route]
public IHttpActionResult Explore(int cityId)
{
var lists = exploreBuilderService.Build(cityId);
return Ok(lists);
}
lists
类型是List<SomeModel>
。SomeModel
没有DTO
循环引用。
示例响应:
Response Headers
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Fri, 17 Jan 2020 12:02:37 GMT
Content-Length: 290248
Data
[..., {"id":47
...
是数组中的其他对象。看起来 json 响应字符串是在随机位置剪切的。MalformedJsonException
当响应像这样时,我们的 android 应用程序会失败。对于同一数据集,它会像 5-10 次请求一样发生一次。
你遇到过这样的问题吗?我应该在哪里寻找导致这种情况的潜在问题?
解决方案
问题在于我们的一个中间件进行了响应拦截。
推荐阅读
- algorithm - 如何从运行总数中添加或减去数字,使其遵循随机给定的指令
- wso2 - WSO2 EI - 处理 SFTP 错误并调用故障/错误序列
- angular - 使用 Prisma 和 Apollo 调用多个 GraphQL 突变的正确方法是什么
- html - 如何使 Bootstrap 列占据主要高度?
- rrdtool - RRDTool 数据值(例如最大值)在不同的时间分辨率下是不同的
- java - 如何使用 EventChannel 从本机服务的 BroadcastReciever 接收数据流?
- mysql - 在 MySQL 中将 GenerationType.SEQUENCE 与 Hibernate 一起使用是个好主意吗?
- vb.net - 如何确定一个变量是否大于Visual Basic中的2个其他变量
- agda - 在 Agda 中,我如何证明在 uncons over coinductive list(aka Stream)之后的 cons 是身份?
- python-3.x - 在 Pandas 数据框中定义递归函数