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