首页 > 解决方案 > 为什么中间件会以这种方式产生错误?

问题描述

我是 ASP.NET Core 的初学者,只是一个关于中间件如何产生错误的问题。

我正在阅读一本解释配置中间件时顺序重要性的书:

在此处输入图像描述

但是我有点困惑,对于第二种情况,为什么图像大小调整中间件不能产生如下错误:

在此处输入图像描述

因为中间件在调用之前生成错误是合乎逻辑的next()

public class ImageResizeMiddleware 
{
    private readonly RequestDelegate _next;
    public ImageResizeMiddleware (RequestDelegate next) { _next = next }

    public Task Invoke(HttpContext context) 
    {
          ...   // if an error occurs here, then 500 should be added to the context here
          await next(context); // control passed to the error handling middleware
    }
}

所以如果之前发生错误next(context),那么错误处理中间件可以看到500 HttpContext,不是吗?

标签: c#.netasp.net-core

解决方案


这取决于!将错误进一步传播到管道并可能被另一个中间件/控制器覆盖是否有意义?

对于图像大小调整中间件,我希望处理程序检查请求是否应该被处理,如果不是,则将请求传递给下一个处理程序。如果请求匹配并由中间件处理,则将请求进一步传播到管道中以可能被其他东西覆盖是没有意义的,而是应该在写入响应后立即返回。这意味着永远不会调用错误处理中间件,也不会有机会美化/记录错误。

想象一下,如果身份验证/授权中间件没有使管道短路并立即返回!您最终可能会收到未经身份验证/未经授权的请求,以潜在地访问他们不应该访问的资源。

在此处输入图像描述

简而言之,如果发生错误,则中间件应该返回,而不是将请求进一步传播到管道中。


推荐阅读