相关疑难解决方法(0)

修改中间件响应

我的要求:编写一个中间件,用于过滤来自另一个后续中间件(例如Mvc)的响应中的所有"坏词".

问题:响应的流式传输.因此,当我们FilterBadWordsMiddleware从已经写入响应的后续中间件回到我们的时候,我们对派对来说太迟了......因为响应已经开始发送,这导致了众所周知的错误response has already started......

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

.net-core asp.net-core asp.net-core-middleware

8
推荐指数
3
解决办法
5406
查看次数

在 ASP.NET Core 中间件出现异常时获得空响应

我正在尝试创建一个可以记录响应正文以及全局管理异常的中间件,我成功了。我的问题是我放在异常中的自定义消息没有显示在响应中。

中间件代码 01:

public async Task Invoke(HttpContext context)
{
    context.Request.EnableRewind();
        
    var originalBodyStream = context.Response.Body;
    using (var responseBody = new MemoryStream())
    {
        try
        {
            context.Response.Body = responseBody;
            await next(context);

            context.Response.Body.Seek(0, SeekOrigin.Begin);
            var response = await new StreamReader(context.Response.Body).ReadToEndAsync();
            context.Response.Body.Seek(0, SeekOrigin.Begin);

            // Process log
             var log = new LogMetadata();
             log.RequestMethod = context.Request.Method;
             log.RequestUri = context.Request.Path.ToString();
             log.ResponseStatusCode = context.Response.StatusCode;
             log.ResponseTimestamp = DateTime.Now;
             log.ResponseContentType = context.Response.ContentType;
             log.ResponseContent = response;
             // Keep Log to text file
             CustomLogger.WriteLog(log);

            await responseBody.CopyToAsync(originalBodyStream);
        }
        catch (Exception ex)
        {
            context.Response.ContentType = …
Run Code Online (Sandbox Code Playgroud)

c# middleware asp.net-core

7
推荐指数
1
解决办法
7876
查看次数