.NET 8
I have a Middleware that reads the request response:
<code> public async Task InvokeAsync(HttpContext context)
{
var originalBodyStream = context.Response.Body;
using (var responseBody = new MemoryStream())
{
context.Response.Body = responseBody;
await _next(context);
context.Response.Body.Seek(0, SeekOrigin.Begin);
var responseText = await new StreamReader(context.Response.Body).ReadToEndAsync();
context.Response.Body.Seek(0, SeekOrigin.Begin);
Console.WriteLine("Response Body:");
Console.WriteLine(responseText);
await responseBody.CopyToAsync(originalBodyStream);
}
}
</code>
<code> public async Task InvokeAsync(HttpContext context)
{
var originalBodyStream = context.Response.Body;
using (var responseBody = new MemoryStream())
{
context.Response.Body = responseBody;
await _next(context);
context.Response.Body.Seek(0, SeekOrigin.Begin);
var responseText = await new StreamReader(context.Response.Body).ReadToEndAsync();
context.Response.Body.Seek(0, SeekOrigin.Begin);
Console.WriteLine("Response Body:");
Console.WriteLine(responseText);
await responseBody.CopyToAsync(originalBodyStream);
}
}
</code>
public async Task InvokeAsync(HttpContext context)
{
var originalBodyStream = context.Response.Body;
using (var responseBody = new MemoryStream())
{
context.Response.Body = responseBody;
await _next(context);
context.Response.Body.Seek(0, SeekOrigin.Begin);
var responseText = await new StreamReader(context.Response.Body).ReadToEndAsync();
context.Response.Body.Seek(0, SeekOrigin.Begin);
Console.WriteLine("Response Body:");
Console.WriteLine(responseText);
await responseBody.CopyToAsync(originalBodyStream);
}
}
And I made a test controller, which is similar in functionality to the real case:
<code> [HttpGet("sample")]
public IActionResult GetSample()
{
var s = "[rn { "id": "test",rn "id": "test" } ]";
return Content(s, "application/json; charset=utf-8");
}
</code>
<code> [HttpGet("sample")]
public IActionResult GetSample()
{
var s = "[rn { "id": "test",rn "id": "test" } ]";
return Content(s, "application/json; charset=utf-8");
}
</code>
[HttpGet("sample")]
public IActionResult GetSample()
{
var s = "[rn { "id": "test",rn "id": "test" } ]";
return Content(s, "application/json; charset=utf-8");
}
This controller returns the correct result:
correct result
But when I use the following line, I get an incorrect response:
<code> [HttpGet("sample")]
public IActionResult GetSample()
{
var s = "[rn {rn "id": "test",rn "tt": "213",rn "nn": "33"rn }rn]";
return Content(s, "application/json; charset=utf-8");
}
</code>
<code> [HttpGet("sample")]
public IActionResult GetSample()
{
var s = "[rn {rn "id": "test",rn "tt": "213",rn "nn": "33"rn }rn]";
return Content(s, "application/json; charset=utf-8");
}
</code>
[HttpGet("sample")]
public IActionResult GetSample()
{
var s = "[rn {rn "id": "test",rn "tt": "213",rn "nn": "33"rn }rn]";
return Content(s, "application/json; charset=utf-8");
}
incorrect response
The response is displayed correctly in Postman
postman