ASP.NET Core中间件与过滤器的对比

9 浏览
0 Comments

ASP.NET Core中间件与过滤器的对比

在阅读了关于ASP.NET Core中间件的文章之后,我对何时应该使用过滤器和何时应该使用中间件感到困惑,因为它们似乎实现了相同的目标。在什么情况下应该使用中间件而不是过滤器呢?

0
0 Comments

在ASP.NET Core中,存在着中间件(middleware)和过滤器(filters)这两种处理请求的方式。虽然它们的目的都是处理请求,但它们的执行顺序、作用范围和对上下文的访问方式有所不同。

中间件是在MVC上下文可用之前执行的,它无法访问ActionFilter中的ActionExecutingContext或ActionExecutedContext。但是,中间件可以访问HttpContext,并对请求和响应进行操作。由于模型绑定尚未发生,因此使用中间件来运行验证函数或修改值并不合适。另外,中间件会在每个请求上运行,无论调用哪个控制器或操作。

相反,过滤器只会在指定的操作和控制器上运行,除非在启动时将过滤器注册为全局过滤器。由于过滤器可以访问上下文,因此还可以访问控制器和操作本身。

因此,中间件和过滤器的主要区别在于它们的执行顺序、作用范围和对上下文的访问能力。

文章来源:thetechplatform.com

0
0 Comments

在ASP.NET Core中,有两种常见的处理请求的方式:中间件和过滤器。中间件是在整个ASP.NET Core应用程序的层级上操作的,可以对每个请求进行处理。而过滤器只对传入MVC的请求进行处理。

因此,如果我们想要强制要求所有请求都必须通过HTTPS进行访问,我们需要使用一个中间件来实现。如果我们使用一个MVC过滤器来实现这个功能,用户仍然可以通过HTTP请求静态文件。

另一方面,记录MVC控制器中请求持续时间的功能完全可以使用一个操作过滤器来实现。

所以,为了解决这个问题,我们可以使用中间件来处理整个应用程序的请求,以确保所有请求都通过HTTPS进行访问。而对于一些只需要在MVC控制器中处理的请求,我们可以使用过滤器来实现。这样可以更好地控制应用程序的行为和性能。

下面是一个示例代码,演示了如何使用中间件来强制要求所有请求都通过HTTPS进行访问:

public class HttpsMiddleware

{

private readonly RequestDelegate _next;

public HttpsMiddleware(RequestDelegate next)

{

_next = next;

}

public async Task Invoke(HttpContext context)

{

if (!context.Request.IsHttps)

{

var httpsUrl = $"https://{context.Request.Host}{context.Request.Path}{context.Request.QueryString}";

context.Response.Redirect(httpsUrl, permanent: true);

return;

}

await _next(context);

}

}

public class Startup

{

public void Configure(IApplicationBuilder app)

{

app.UseMiddleware();

// other middleware and configuration

}

}

通过以上示例代码,我们可以看到如何使用一个中间件来实现强制要求所有请求都通过HTTPS进行访问的功能。在Startup类的Configure方法中,我们通过app.UseMiddleware方法来注册我们的中间件。

总结起来,中间件和过滤器是ASP.NET Core中处理请求的两种方式。中间件可以在整个应用程序的层级上进行操作,而过滤器只对传入MVC的请求进行处理。通过使用合适的方式,我们可以更好地控制应用程序的行为和性能。

0
0 Comments

ASP.NET Core中的中间件和过滤器是两种不同的处理请求的方式。中间件是在请求处理管道的早期阶段执行的,它们用于处理和转换请求,例如记录日志、处理请求头等。过滤器是在请求处理管道的后期阶段执行的,它们用于在请求处理过程中对MVC操作进行操作和控制。

中间件和过滤器的出现是为了解决不同类型的请求处理需求。如果只关心请求的流程和执行,如对请求头进行响应等,则使用中间件。而如果需要对MVC操作进行操作和控制,则使用过滤器。

在ASP.NET Core中,中间件和过滤器的使用方式略有不同。中间件可以在整个应用程序中使用,不仅限于MVC。而过滤器是特定于MVC的,用于操作和控制MVC操作。

如果有逻辑需要在每个请求上运行,其中一些与MVC相关,那么可以将其放在中间件中,然后由过滤器处理所需的特定逻辑,然后重新抛出到中间件。

在.NET Core Web API中是否可以使用过滤器取决于是否使用了MVC。如果使用了MVC,则可以使用过滤器。如果没有使用MVC,则不能使用过滤器。

参考链接:

- [ASP.NET Monsters #91: Middleware vs. Filters](https://channel9.msdn.com/Series/aspnetmonsters/ASPNET-Monsters-91-Middleware-vs-Filters)

0