【发布时间】:2020-06-23 11:14:19
【问题描述】:
我正在开发一个 ASP.NET 2.2 Web API 项目,该项目使用包装器来产生一致的响应。经过一番搜索,我发现团队遵循文章“A Custom Wrapper For Managing Exceptions And Consistent Responses”中的实现。
这按预期工作。现在我们计划升级到 ASP.NET Core 3.1。升级后,这不能按预期工作。我认为这是由于 ASP.NET Core 2.2 和 3.1 之间的重大变化。我按照 Microsoft 的 Migrate from ASP.NET Core 2.2 to 3.0 指南修复了所有这些问题。
现在我来自 API 的 JSON 响应中断了。
这是响应成功时执行的代码:
private static Task HandleSuccessRequestAsync(HttpContext context, object body, int code)
{
context.Response.ContentType = "application/json";
string jsonString, bodyText = string.Empty;
APIResponse apiResponse = null;
if (!body.ToString().IsValidJson())
bodyText = JsonConvert.SerializeObject(body);
else
bodyText = body.ToString();
dynamic bodyContent = JsonConvert.DeserializeObject<dynamic>(bodyText);
Type type;
type = bodyContent?.GetType();
if (type.Equals(typeof(Newtonsoft.Json.Linq.JObject)))
{
apiResponse = JsonConvert.DeserializeObject<APIResponse>(bodyText);
if (apiResponse.StatusCode != code)
jsonString = JsonConvert.SerializeObject(apiResponse);
else if (apiResponse.Result != null)
jsonString = JsonConvert.SerializeObject(apiResponse);
else
{
apiResponse = new APIResponse(code, ResponseMessageEnum.Success.GetDescription(), bodyContent, null);
jsonString = JsonConvert.SerializeObject(apiResponse);
}
}
else
{
apiResponse = new APIResponse(code, ResponseMessageEnum.Success.GetDescription(), bodyContent, null);
jsonString = JsonConvert.SerializeObject(apiResponse);
}
return context.Response.WriteAsync(jsonString);
}
我进行了调试,直到它在 HandleSuccessRequestAsync() 方法中找到了 return context.Response.WriteAsync(jsonString);。一切顺利。但 JSON 响应中断。
预期响应:
{
"Version": "1.0.0.0",
"StatusCode": 200,
"Message": "Request successful.",
"Result": [
"value1",
"value2"
]
}
实际反应:
{
"Version": "1.0.0.0",
"StatusCode": 200,
"Message": "Request successful.",
"Result":
请帮助我解决我哪里出错了?这是因为ASP.NET Core 3.1升级了吗?
【问题讨论】:
-
你的意思是json中的
Result没有数据吗?根据您提供的链接和迁移文档,我从 2.2 项目迁移的 3.1 项目运行良好,Result具有价值。如果您希望社区审查和调试代码,您可以分享一个完整的演示,可以重现问题? -
我正在获取响应数据,但它被截断了。这是我的回购链接,其中包含上面代码APIResponseWrapper 的演示。请帮忙。
-
当你说,“一切都很好。但是 JSON 响应中断了。”您的意思是该对象被正确反序列化为 JSON,但随后在
return和用户之间的某个时间点被截断?还是您的意思是一切正常,除了反序列化返回截断的 JSON? -
您找到解决此问题的方法了吗?可以分享一下吗?
-
@M Akin 您正在使用响应包装器吗?你有什么问题?
标签: c# json serialization asp.net-core-webapi asp.net-core-3.1