I have a simple controller action that looks like this:
    public Task<IEnumerable<Data>> GetData()
    {
        IEnumerable<Data> data = new List<Data>();
        return data;
    }
I want to be able to check the return value from middleware so that the JSON looks something like this:
{
  "data": [
  ],
  "apiVersion": "1.2",
  "otherInfoHere": "here"
}
So my payload is always within data. I know that I can do this at the controller level, but I do not want to do this with every action. I would rather do this in the middleware once and for all.
Here is an example of my middleware:
public class NormalResponseWrapper
{
    private readonly RequestDelegate next;
    public NormalResponseWrapper(RequestDelegate next)
    {
        this.next = next;
    }
    public async Task Invoke(HttpContext context)
    {                
        var obj = context;
        
        
        await context.Response.WriteAsync();
    }
Any ideas?
The value is received now, but it returns it to the end
        try
        {
            using (var memStream = new MemoryStream())
            {
                context.Response.Body = memStream;
                await next(context);
                memStream.Position = 0;
                object responseBody = new StreamReader(memStream).ReadToEnd();
                memStream.Position = 0;
                await memStream.CopyToAsync(originalBody);
                
                await context.Response.WriteAsync(new BaseResponse() { data = responseBody }.toJson());
            }
        }
        finally
        {
            context.Response.Body = originalBody;
        }
source
share