Search code examples
c#asp.net-core.net-5api-gatewayasp.net-core-middleware

Can not read Response.Body from server in .Net5


I track request/response log in middleware of Api gateway .Net5, I can able to read Request.Body, However, I do not understand the body of the response, it show like below

 `�      <�_O�0G��r_����%>�"A�8��[��Im���
�w7n��{rO��/�կZ~y����36������rNIJ��d�w��\�'�����|w-�!�OR#Q�fi�X��   G��Sg�`��X@��{��KE�k�T3Zj%5N�@���+��SY��[�׊C(w� �·��@"�E���UnM�}��Jc�k�����F����#��$q�O(�.tÃ�c�ӕW����  �� ID�P`

Here I share my read response code

              string responseBody = string.Empty;
                var originalBodyStream = context?.Response.Body;

                //Create a new memory stream...
                using (var responseStream = new MemoryStream())
                {
                        context.Response.Body = responseStream;
                        await _next.Invoke(context);
                        context.Response.Body.Seek(0, SeekOrigin.Begin);
                        responseBody = new StreamReader(context.Response.Body).ReadToEnd();
                        context.Response.Body.Seek(0, SeekOrigin.Begin);
                        await responseStream.CopyToAsync(originalBodyStream);
                }

And this is my request header

{
    "Accept":"application/json, text/plain, */*",
    "Accept-Encoding":"gzip",
    "Accept-Language":"en-GB,en-US;q=0.9,en;q=0.8",
    "Connection":"Keep-Alive",
    "Content-Length":"2",
    "Content-Type":"application/json;charset=UTF-8",
   }

Solution

  • I can read using SharpZipLib package, This code working for me

                GZipInputStream unGzipStream = new GZipInputStream(response.Body);
                var responseBodytxt = new StreamReader(unGzipStream).ReadToEnd();
                response.Body.Seek(0, SeekOrigin.Begin);