ThreeMammals / Ocelot

.NET API Gateway
https://www.nuget.org/packages/Ocelot
MIT License
8.24k stars 1.62k forks source link

当下游服务返回"text/plain"类型时导致"response.Body"中变得异常得长,这正常吗? #2046

Closed 17371 closed 3 months ago

17371 commented 3 months ago

我期望能将响应内容进行存储,但意外发现响应内容无法解析,他将显示乱码; 调试发现response.ContentType:application/json 没问题,当response.ContentType为text/plain时出现问题

下面是我的描述

例如下游服务将返回

ServerA Program.cs:

app.UseMiddleware<MyCustomMiddleware>();
...
app.MapGet("/test", () =>  " 运行正常");



OcelotGateway Program.cs:

app.UseMiddleware<MyCustomMiddleware>();
app.UseOcelot().Wait();

MyCustomMiddleware

Stream originalResponseStream = response.Body;
using MemoryStream replaceResponseStream = new MemoryStream();
response.Body = replaceResponseStream;
await next(context); 
res_content_type = response.ContentType ?? "";
Console.WriteLine("响应类型:" + res_content_type); 
Console.WriteLine("响应长度:" + replaceResponseStream.Length);
replaceResponseStream.Position = 0;
await replaceResponseStream.CopyToAsync(originalResponseStream);
response.Body = originalResponseStream;

ServerA 响应类型:text/plain; charset=utf-8 响应长度:2

OcelotGateway 响应类型:text/plain; charset=utf-8 响应长度:121 

replaceResponseStream从原来得2变成了121 !!!我不是很理解多出得部分是什么