1、使用中间件的方法
public class BeforeAfterMiddleware { private readonly RequestDelegate _next; public BeforeAfterMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { using var actionResponse = new MemoryStream(); var httpResponse = context.Response.Body; context.Response.Body = actionResponse; await _next.Invoke(context); actionResponse.Seek(0, SeekOrigin.Begin); var reader = new StreamReader(actionResponse); using var bufferReader = new StreamReader(actionResponse); string body = await bufferReader.ReadToEndAsync(); context.Response.Clear(); await context.Response.WriteAsync("<h1>cjavapy:原始内容之前</h1>"); await context.Response.WriteAsync(body); await context.Response.WriteAsync("<h1>cjavapy:原始内容之后</h1>"); context.Response.Body.Seek(0, SeekOrigin.Begin); await context.Response.Body.CopyToAsync(httpResponse); context.Request.Body = httpResponse; } }
使用方法:
app.UseMiddleware<BeforeAfterMiddleware>();
2、实现IOutputFormatter
在ConfigureServices()方法中添加代码,如下,
services.AddControllers(opt => { //默认 OutputFormatters : //HttpNoContentFormatter,StringOutputFormatter, //StreamOutputFormatter,SystemTextJsonOutputFormatter opt.OutputFormatters.Clear(); //opt.OutputFormatters.RemoveType<StringOutputFormatter>(); //opt.OutputFormatters.RemoveType<SystemTextJsonOutputFormatter>(); opt.OutputFormatters.Add(new AppendHtmlOutputFormatter()); });
实现IOutputFormatter如下,
public class AppendHtmlOutputFormatter : IOutputFormatter { public bool CanWriteResult(OutputFormatterCanWriteContext context) => true; public Task WriteAsync(OutputFormatterWriteContext context) { var json = System.Text.Json.JsonSerializer.Serialize(context.Object); var modified = "<h1>cjavapy:原始内容之前</h1>" + json + "<h1>cjavapy:原始内容之后</h1>"; return context.HttpContext.Response.WriteAsync(modified); } }