Asp.netCore中间件理解 下载本文

Asp.net Core 2.2关于中间件的理解 Sam.Zheng 2019-09-06

1 什么中间件

ASP.NET Core的中间件通过一个类型Func的委托对象来表示,而RequestDelegate也是一个委托,它代表一项请求处理任务。

Asp.net Core 关于Startup中间件的注册

2 Asp.net core 2.2 常用中间件

中间件 Authentication CORS Response Caching Response Compression 描述 提供身份验证支持 配置跨域资源共享 提供缓存响应支持 提供响应压缩支持 中间件 Routing Session Static Files URL Rewriting Middleware 描述 定义和约束请求路由 提供用户会话管理 为静态文件和目录浏览提供服务提供支持 用于重写 Url,并将请求重定向的支持 3 执行流程

4 默认中间件说明

创建Asp.net core 2.2版本后将在Startup.cs有Configure函数。这里是配置中间件的地方。

public void Configure(IApplicationBuilder app, IHostingEnvironment env) {

if (env.IsDevelopment()) {

app.UseDeveloperExceptionPage(); } else {

app.UseExceptionHandler(\);

}

app.UseStaticFiles(); app.UseCookiePolicy();

app.UseMvc(routes => {

routes.MapRoute( name: \,

template: \); }); }

? 异常中间件

app.UseExceptionHandler(\); 捕获以后调用中发生的任何异常 ?

静态文件中间件 app.UseStaticFiles();

静态文件中间件不提供授权检查。 由其提供的任何文件,包括wwwroot下的文件都是公开的。 如果请求没有被静态文件中间件处理,它将被传递给执行身份验证的Identity中间件(app.UseAuthentication)。 身份不会使未经身份验证的请求发生短路。 虽然身份认证请求,但授权(和拒绝)仅在MVC选择特定的Razor页面或控制器和操作之后才会发生。 ?

Cookie策略中间件

实现IResponseCookies接口,添加、删除cookie时加入自定义控制方法,并支持全局cookie属性设置。

实现CookieOptions.IsEssential的功能,该属性标识当前属性是否必须的或是否绕过ITrackingConsentFeature的检查。

实现ITrackingConsentFeature接口,该接口主要是向cookie中添加并检索用户确认设置。 ?

Mvc中间件

MVC框架能够处理请求并返回响应(通常是view result或json) 说明:IApplicationBuilder 需要独立进行梳理。

5 创建创建中间件

例1: 使用IApplicationBuilder 中.Run方法,创建一个中间件并运行。

public void Configure(IApplicationBuilder app, IHostingEnvironment env) {

//使用委托创建第一个中间件 app.Run(async context => {

await context.Response.WriteAsync(\); });