JSON разрывы ответа в ASP. NET Core 3.1 Web API с пользовательской оболочкой ответа - PullRequest
0 голосов
/ 11 марта 2020

Я работаю над проектом веб-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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...