ASP.NET Core 中的中间件
在 ASP.NETCore 中,中间件(Middleware)是一个可以处理 HTTP 请求或响应的软件管道。是一种装配到应用管道以处理请求和响应的软件。 每个组件选择是否将请求传递到管道中的下一个组件。可在管道中的下一个组件前后执行工作。
ASP.NET Core 中的中间件中给中间件组件的定位是具有非常特定的用途。例如,我们可能有需要一个中间件组件验证用户,另一个中间件来处理错误,另一个中间件来提供静态文件,如 JavaScript 文件,CSS 文件,图片等等。
使用 WebApplication
创建中间件管道
中间件( 在中间的组件)是一种装配到应用管道处理请求和响应的软件
ASP.NET Core 请求管道包含一系列请求委托,依次调用。 下图演示了这一概念。 沿黑色箭头执行。每个委托均可在下一个委托前后执行操作。 应尽早在管道中调用异常处理委托,这样它们就能捕获在管道的后期阶段发生的异常。
实现中间件
ASP.NET Core中间件模型是我们能够快捷的开发自己的中间件,完成对应用的扩展,我们先从一个简单的例子了解一下中间件的开发。
首先,我们创建一个ASP.NET Core 应用,在Startup.cs中有如下代码:
第一个代码中这段代码中,使用Use方法运行一个委托,我们可以在Next调用之前和之后分别执行自定义的代码,从而可以方便的进行日志记录等工作。这段代码中,使用next.Invoke()方法调用下一个中间件,从而将中间件管道连贯起来;如果不调用next.Invoke()方法,则会造成管道短路。
第二哥代码中使用Run方法运行一个委托,这就是最简单的中间件,它拦截了所有请求,返回一段文本作为响应。Run委托终止了管道的运行,因此也叫作终端中间件。
封装中间件
Asp.net core内置中间件的介绍
中间件名称 | 如何使用及说明 |
Authentication | App.UseAuthentication,验证当前请求的用户,并设置HttpContext.User,当OAuth callbacks时,会中止执行下一个中间件。放到要用到用户验证的中间件前面 |
Static File | app.UseStaticFiles(),判断当前请求是否为静态文件,如果是则中止执行下一个中间件,否则继续下一个中间件。放到管道的最前 |
Response Caching | app.UseResponseCaching(),缓存中间件 |
MVC | app.UseMvc(),将MVC引入到中间件管道,如果请求的地址能找到对应的MVC路由,则中止执行下一个中间件。放到管道的最后。 |
Exception | app.UseDeveloperExceptionPage();或app.UseExceptionHandler();用于处理程序的异常信息。放到管道的最前 |
Authorization | 授权中间件。不需直接引用,App.UseMvc()会在内部调用,并配合app.UseAuthentication()一起使用。 |