首页 > 其他分享 >.Net Core 改变响应值的几种方法

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

时间:2024-03-29 13:05:13浏览次数:25  
标签:Body Core 响应值 Response public context var Net memStream

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,响应值,Response,public,context,var,Net,memStream
From: https://blog.csdn.net/qq_20382175/article/details/137112006

相关文章

  • .net core 解析xml字符串
            stringxml=@"<root><element1>Text1</element1> <element2>Text2</element2</root>";        XDocumentxdoc=XDocument.Parse(xml);        //读取XML文件        XElementroot......
  • 深入理解Kubernetes中的Deployment
    Kubernetes作为容器编排系统的先驱,为应用程序的部署和管理提供了强大的工具和机制。其中,Deployment是Kubernetes中一个核心的概念,它为应用程序的部署和更新提供了一种简单而灵活的方法。在本文中,我们将深入探讨Kubernetes中Deployment的工作原理、使用方法以及最佳实践。什么......
  • 【基于价值分解网络的多智能体协同学习】【VDN】 【Value-Decomposition Networks For
    目录Value-DecompositionNetworksForCooperativeMulti-AgentLearning基于价值分解网络(VDN)的多智能体协同学习Abstract 摘要1Introduction引言1.1OtherRelatedWork 1.1其他相关工作2Background 2背景2.1ReinforcementLearning2.1强化学习​2.2De......
  • kbnet.toolkit.formulas
    前言2024年3月份马上就要结束,困扰我近2个月的感冒总算要痊愈了,为此特别发布本篇文章以示安慰。kbnet.toolkit.formulas是一个.net/c#类库,提供类似Excel一样的公式用于计算数据,当然没有excel公式那么多、那么全,但是应该足够使用了。用它来做什么?难道用它来自己实现一个excel软件......
  • 8、.NET Core 实践 2024-03-29 11:44 CPU过高
    Windbg指令记录0:008>!runawayUserModeTimeThreadTime7:35c00days0:03:04.9538:111c0days0:03:01.6406:4d300days0:02:57.2815:84240days0:02:52.6400:6fe80days0:00:00.0312:6c280......
  • .NET分布式Orleans - 7 - Streaming
    概念在Orleans中,Streaming是一组API和功能集,它提供了一种构建、发布和消费数据流的方式。这些流可以是任何类型的数据,从简单的消息到复杂的事件或数据记录。StreamingAPI允许你定义、发布和消费这些流,而无需关心底层的传输机制或数据存储。每个流都有一个唯一的标识符,称为Stre......
  • EFCore
    《1》数据更新方法//方法1批量更新数据库数据,直接使用SQL语句ctx.Database.ExecuteSql($"UPDATE[T_Books]SET[Price]=[Price]+2");//方法2EFCore仍会为每个本书发送UPDATE语句,并且数据库必须单独执行每个语句......
  • 基于 Kubernetes 的容器化物联网平台
    鱼弦:公众号【红尘灯塔】,CSDN内容合伙人、CSDN新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)基于Kubernetes的容器化物联网平台1.简介基于Kubernetes的容器化物联网平......
  • Vue+.Net6部署日记
    一.准备工作vue编译后以dist文件夹在iis新建一个网站,.Net6发布后同样的建站但是要注意把应用程序池设置为无托管模式二.配置反向代理IIS给前端方向代理需要以下两个组件:1.ARR2.Url重写;这两个组件都可以在www.iis.net搜到,在搜索栏输入关键词然后一个个找就好,先确保下......
  • 探秘Kubernetes:在本地环境中玩转容器技术
    在云计算时代,Kubernetes已成为云原生技术的真正基石。它是应用程序容器的编排动力源,可跨多个集群自动部署、扩展和运行容器。Kubernetes不仅仅是一个流行词,它还是一种模式转变,是现代软件可扩展性和敏捷性的基础。 虽然Kubernetes经常与云原生联系在一起,但它对本地基础设施......