首页 > 编程语言 >asp.Net Core 改变响应值的几种方法

asp.Net Core 改变响应值的几种方法

时间:2023-09-20 11:31:45浏览次数:42  
标签:Body Core asp 响应值 public context var memStream Response

1.中间件

using Microsoft.AspNetCore.Mvc;
using System.Text;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.UseMiddleware<ReplaceMiddleware>();
app.MapControllers();
app.Run();

public class HomeController : Controller
{
    [HttpGet("/")]
    public IActionResult Index() => Content("XXX%%%%%%%%%%%%%%");
}

public class ReplaceMiddleware
{
    private readonly RequestDelegate _next;

    public ReplaceMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        string content;
        var originalBody = context.Response.Body;
        using (var memStream = new MemoryStream())
        {
            context.Response.Body = memStream;
            await _next(context);

            memStream.Position = 0;
            string responseBody = await new StreamReader(memStream).ReadToEndAsync();
            content = responseBody.Replace("XXX", "YYY");

            context.Response.Body = originalBody;
            await context.Response.Body.WriteAsync(Encoding.UTF8.GetBytes(content));
        }
    }
}

2.ResultFilter


using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Text;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
//app.UseMiddleware<ReplaceMiddleware>();
app.MapControllers();
app.Run();

public class HomeController : Controller
{
    [HttpGet("/")]
    [ReplaceFilter]
    public IActionResult Index() => Content("XXX%%%%%%%%%%%%%%");
}

public class ReplaceFilterAttribute : ResultFilterAttribute
{
    public override async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
    {
        string content;
        var originalBody = context.HttpContext.Response.Body;
        using (var memStream = new MemoryStream())
        {
            context.HttpContext.Response.Body = memStream;
            await base.OnResultExecutionAsync(context, next);

            memStream.Position = 0;
            string responseBody = await new StreamReader(memStream).ReadToEndAsync();
            content = responseBody.Replace("XXX", "YYY");

            context.HttpContext.Response.Body = originalBody;
            await context.HttpContext.Response.Body.WriteAsync(Encoding.UTF8.GetBytes(content));
        }
    }
}

3.ActionFilter

public class ReplaceFilterAttribute : ActionFilterAttribute
{
    public override async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
    {
        string content;
        var originalBody = context.HttpContext.Response.Body;
        using (var memStream = new MemoryStream())
        {
            context.HttpContext.Response.Body = memStream;
            await base.OnResultExecutionAsync(context, next);

            memStream.Position = 0;
            string responseBody = await new StreamReader(memStream).ReadToEndAsync();
            content = responseBody.Replace("XXX", "YYY");

            context.HttpContext.Response.Body = originalBody;
            await context.HttpContext.Response.Body.WriteAsync(Encoding.UTF8.GetBytes(content));
        }
    }
}


标签:Body,Core,asp,响应值,public,context,var,memStream,Response
From: https://blog.51cto.com/u_1099805/7535618

相关文章

  • Jasper模板使用记录七——Group分组
    Group特点1.通过Group分组可以将集合中的数据进行分组显示2.Group分组有GroupHeader和GroupFooter可以在每个组的前后添加元素3.Group分组的效果是在Detail中显示的注意点Group并不会将乱序的集合数据进行分组和排序,只会按照集合的顺序进行遍历,如果本条数据和上一条......
  • Jasper模板使用记录六——模板字体问题
    1.TIBCOjaspersoft设置字体使用TIBCOjaspersoft软件进行模板设计时,可以为各个组件设置显示的字体,通常大部分字体可以使用,如果有不能使用的字体,也可以通过下载字体文件,并为TIBCOjaspersoft进行设置,先选中项目,然后进行如下操作:2.后台工程设置字体2.1、创建字体配置文......
  • Jasper模板使用记录二——JSON文件数据源
    json文件数据源1.新建json文件,并将字段补充完整,示例如下:{ hosp_name:"医院", rows:[{ name:"姓名", age:12, }]}2.新建json数据源,如下:3.新建Jasper文件4.设置数据源,并导入数据源字段至Fields5.通过拖拽Paramter或Field至模板,进行模板设计......
  • Jasper模板使用记录三——数据换行问题
    通过设置组件的StreetchWithOverflow和StretchType可以让组件整行拉伸......
  • Jasper模板使用记录一——各模块特点
    模板各个模块特点Title(标题):只在整个报表的第一页的最上端显示。只在第一页显示,其他页面均不显示。PageHeader(页头):在整个报表中每一页都会显示。在第一页中,出现的位置在TitleBand的下面。在除了第一页的其他页面中PageHeader的内容均在页面的最上端显示。PageFooter(......
  • 目标进程已退出,但未引发 CoreCLR 启动事件
    百度之多数是说运行库没有安装。https://www.cnblogs.com/lingxi-ljl/p/17082020.html运行以下命令都能找到相关版本的内容dotnet--list-sdksdotnet--list-runtimes重新创建相同版本的一个项目,可以正常启动。怀疑是net6依赖记录的json文件有问题,于是改一下项目的名称,使生......
  • 使用任务计划开机启动ASP.NET Core应用程序
    ASP.NETCore应用程序现在是一个控制台应用程序,在Windows上直接双击启动,但如果想让开发完成的ASP.NETCore应用程序开机启动,可以将ASP.NETCore应用程序修改成Windows服务运行,但这需要额外添加代码,也可以使用IIS来托管ASP.NETCore应用程序,但可能需要安装一些支持IIS的组件,第三个......
  • ViewFaceCore
    https://github.com/ViewFaceCore/ViewFaceCore usingSkiaSharp;usingSystem.Diagnostics;usingSystem.Drawing;usingViewFaceCore.Core;usingViewFaceCore.Models;usingstaticSystem.Net.Mime.MediaTypeNames;namespaceConsoleApp16{internalclass......
  • Jasper模板CLoodop打印记录
    一、填充json文件数据源1.新建json文件,并将字段补充完整,示例如下:{ hosp_name:"医院", rows:[{ name:"姓名", age:12, }]}2.新建json数据源,如下:3.新建Jasper文件4.设置数据源,并导入数据源字段至Fields5.通过拖拽Paramter或Field至模板,进行模板设计二、模......
  • ASP.Net Web项目调试运行没问题,发布后一直403
    ASP.NetWeb项目调试运行没问题,发布一直403因为换了仓库,同事移了下项目,然后就如标题了,经过几个小时排查,发现项目中只有Global.asax.cs而Global.asax没有包含进项目…特此记录下......