Modify middleware response

前端 未结 4 1909
粉色の甜心
粉色の甜心 2020-12-06 00:30

My requirement: write a middleware that filters all \"bad words\" out of a response that comes from another subsequent middleware (e.g. Mvc).

The problem: streaming

4条回答
  •  攒了一身酷
    2020-12-06 01:09

    A simpler version based on the code I used:

    /// 
    /// The middleware Invoke method.
    /// 
    /// The current .
    /// A Task to support async calls.
    public async Task Invoke(HttpContext httpContext)
    {
        var originBody = httpContext.Response.Body;
        try
        {
            var memStream = new MemoryStream();
            httpContext.Response.Body = memStream;
    
            await _next(httpContext).ConfigureAwait(false);
    
            memStream.Position = 0;
            var responseBody = new StreamReader(memStream).ReadToEnd();
    
            //Custom logic to modify response
            responseBody = responseBody.Replace("hello", "hi", StringComparison.InvariantCultureIgnoreCase);
    
            var memoryStreamModified = new MemoryStream();
            var sw = new StreamWriter(memoryStreamModified);
            sw.Write(responseBody);
            sw.Flush();
            memoryStreamModified.Position = 0;
    
            await memoryStreamModified.CopyToAsync(originBody).ConfigureAwait(false);
        }
        finally
        {
            httpContext.Response.Body = originBody;
        }
    }
    

提交回复
热议问题