Я работаю над проектом веб-API ASP. NET 2.2, который использует оболочку для получения согласованных ответов. После некоторых поисков я обнаружил, что команда следит за реализацией из статьи « Пользовательский упаковщик для управления исключениями и согласованными ответами ».
Это работает, как и ожидалось. Сейчас мы планируем обновить до ASP. NET Core 3.1. После обновления это не работает, как ожидалось. Я думаю, что это было связано с разрывом изменений между ASP. NET Core 2.2 и 3.1. Я исправил все это, следуя инструкции Microsoft Migrate от ASP. NET Core 2.2 до 3.0 .
Теперь мой JSON ответ от API ломается.
Вот код, который выполняется, когда ответ успешен:
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);
}
Я отлаживал, пока он не достиг return context.Response.WriteAsync(jsonString);
внутри HandleSuccessRequestAsync()
метода. Все хорошо. Но ответ 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?