【发布时间】:2021-12-08 01:55:36
【问题描述】:
我在 Api 网关 .Net5 的中间件中跟踪请求/响应日志,我可以读取 Request.Body,但是,我不了解响应的正文,如下所示
`� <�_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`
在这里分享我的读取响应代码
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);
}
这是我的请求标头
{
"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",
}
【问题讨论】:
-
这显然是一个二进制文件(一个 GZIP 文件),而不是文本。
StreamReader仅用于文本输入。 -
"Content-Length":"2",一定是错的。
-
@PoulBak 它由浏览器创建
-
@PanagiotisKanavos 非常感谢,现在我可以使用 SharpZipLib 包阅读
-
您不必这样做。 ASP.NET Core 已经支持压缩和解压缩。它已经支持请求和响应日志记录。在响应已经压缩后,您自己的中间件似乎运行得太晚了
标签: c# asp.net-core .net-5 api-gateway asp.net-core-middleware