加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – 修改中间件响应

发布时间:2020-12-16 07:07:05 所属栏目:asp.Net 来源:网络整理
导读:我的要求:编写一个中间件,用于过滤来自另一个后续中间件(例如Mvc)的响应中的所有“坏词”. 问题:响应的流式传输.因此,当我们从已经写入响应的后续中间件回到我们的FilterBadWordsMiddleware时,我们已经太晚了,因为响应已经开始发送,这导致了众所周知的错误
我的要求:编写一个中间件,用于过滤来自另一个后续中间件(例如Mvc)的响应中的所有“坏词”.

问题:响应的流式传输.因此,当我们从已经写入响应的后续中间件回到我们的FilterBadWordsMiddleware时,我们已经太晚了,因为响应已经开始发送,这导致了众所周知的错误响应已经开始……

因此,这是许多不同情况下的要求 – 如何处理它?

解决方法

将响应流替换为MemoryStream以防止其发送.修改响应后返回原始流:

public class EditResponseMiddleware
{
    private readonly RequestDelegate _next;

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

    public async Task Invoke(HttpContext context)
    {
        var originBody = context.Response.Body;

        var newBody = new MemoryStream();

        context.Response.Body = newBody;

        await _next(context);

        newBody.Seek(0,SeekOrigin.Begin);

        string json = new StreamReader(newBody).ReadToEnd();

        context.Response.Body = originBody;

        await context.Response.WriteAsync(modifiedJson);
    }
}

这是一种解决方法,它可能会导致性能问题.我希望在这里看到更好的解决方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读