DotNetCore跨平台~聊聊中间件

摘要:
回到目录在进行.netcore平台之后,我们如果希望在请求过程中添加一些事件是非常容易的,你可以把这些事件做成一个中间件Middleware,然后这些中间件就会以Httppipeline的管道方式进行相应,并且它们就像是一个职责链,从你定义的第一个中间件开始,一个一个向下传递,直到最后一个中间件完成为止!publicvoidConfigure{if{app.UseDeveloperExceptionPage();}app.UseAuthorizationOperation();app.UseResponseTime();app.UseRequestKey();app.UseStaticHttpContext();app.UseMvc();事实上,今天的中间件是.netcore里非常大的亮点,其实早就应该写这篇文章了,呵呵!

回到目录

在进行.net core平台之后,我们如果希望在请求过程中添加一些事件是非常容易的,你可以把这些事件做成一个中间件Middleware,然后这些中间件就会以Http pipeline的管道方式进行相应,并且它们就像是一个职责链,从你定义的第一个中间件开始,一个一个向下传递,直到最后一个中间件完成为止!

前几天我写了在.net core里实现模块化服务,DotNetCore跨平台~组件化时代来了 主要是将我们定义的组件添加到IServiceCollection集合里,然后在程序启动后去注册它们,而今天要说的Middleware用到的是IApplicationBuilder,它在程序启动后,加载与http请求相关的组件,这些组件以Pipeline的形式进行处理,也就是我们所说的中间件,下面我来带大家实现一个最简单的Middleware!

从网上找的图,挺形象

DotNetCore跨平台~聊聊中间件第1张

图中记录了一个请求进来,经过各个中间件的处理,最后逐个响应,下面我们来看一下简单的代码实现,和服务组件化一样,也是一个实现,一个扩展方法的调用,最后在startup里去使用它。

大叔Lind.DotNetCore框架里的Middleware

DotNetCore跨平台~聊聊中间件第2张

ResponseTimeMiddleware的实现

    /// <summary>
    ///响应时间的中间件
    /// </summary>
    public classResponseTimeMiddleware
    {
        private readonlyRequestDelegate _next;
        publicResponseTimeMiddleware(RequestDelegate next)
        {
            _next =next;
        }
        public asyncTask Invoke(HttpContext context)
        {
            Stopwatch sw = newStopwatch();
            sw.Start();
            Console.WriteLine("ResponseTimeMiddleware...");
            await_next.Invoke(context);
            sw.Stop();
            Console.WriteLine($"页面响应时间为:{sw.ElapsedMilliseconds}ms");
        }
    }

扩展方法去封装它,以便于其它地方去使用它

    /// <summary>
    ///Lind.DotNetCore.Middleware扩展方法
    /// </summary>
    public static classMiddlewareExtensions
    {
        public static IApplicationBuilder UseResponseTime(thisIApplicationBuilder builder)
        {
            return builder.UseMiddleware<ResponseTimeMiddleware>();
        }
        public static IApplicationBuilder UseRequestKey(thisIApplicationBuilder builder)
        {
            return builder.UseMiddleware<RequestKeyMiddleware>();
        }
        public static IApplicationBuilder UseAuthorizationOperation(thisIApplicationBuilder builder)
        {
            return builder.UseMiddleware<AuthorizationOperationMiddleware>();
        }
    }

最后在startup里使用它,注意是在AddMvc方法前面,要不然对你的mvc,api是无效的,呵呵!

        public voidConfigure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if(env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseAuthorizationOperation();
            app.UseResponseTime();
            app.UseRequestKey();
            app.UseStaticHttpContext();
            app.UseMvc();

事实上,今天的中间件是.net core里非常大的亮点,其实早就应该写这篇文章了,呵呵!

感谢各位的阅读!

回到目录

免责声明:文章转载自《DotNetCore跨平台~聊聊中间件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇docker部署微服务不支持中文字体的解决方案使用npx创建react+typescript项目下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL Server 2008 R2 启动企业管理器,出现“无法读取此系统上以前注册的服务器的列表”

方法 打开C:Users<username>AppDataLocalTemp 要先删除名为1和2的文件,然后分别创建两个名为 1 和 2 的文件夹。 出现问题的原因有可能是清理了*.tmp文件。 下面是图,打开SQL2008R2 点击继续,登陆进去,弹出...

71款开源项目

71款开源项目 百度,一家让人既爱又恨的企业,血友吧贴吧被卖,魏则西事件的持续发酵,一时间将百度推到了舆论的风口浪尖上。是非对错,我们在这里也不多做评判,本文呢为大家整理了百度开源的70+项目,看看有没有感兴趣的。本文内容综合整理自oschina、github。 1. JavaScript图表库 ECharts ECharts开源来自百度商业前端数据可视化...

如何删除eclipse的subclipse插件记住的SVN用户名和密码

如何删除eclipse的subclipse插件记住的SVN用户名和密码找到auth目录,将其以及子目录、子文件都删除。路径在:C:UsersAdministratorAppDataRoamingSubversion其中,AppData要用户自己输入,这个目录是隐藏的。Administrator是这台电脑的用户名。以上方法对win7操作系统有效。  ...

读取文件将 Excel 文件 转换成 CSV 文件 解决方案

本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~     考参:     http://www.codeproject.com/Articles/246772/Convert-xlsx-xls-to-csv     http://exceldatareader.codeplex.com/          做法:从excel中把数据...

快速打造 react 后台管理系统

前言 相信很多小伙伴都有可能碰到开发后台管理系统这样的需求,那么我们该如何快速的完成这个需求呢 本文将以 react 为切入点,记录打造一个基础管理系统模板的过程,以此加深对 react 技术栈以及项目实战的理解,希望对大家开发一个这样的项目有所帮助 如果文章中有出现纰漏、错误之处,还请看到的小伙伴多多指教,先行谢过 项目简介 react-admin 是由...

二维码扫描开源库ZXing定制化【转】

转自:http://www.cnblogs.com/sickworm/p/4562081.html 最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下。 建议: 如果需要集成到自己的app上,而不是做一个demo,不推荐用ZXing的Android外围开发模块,只用核心的core目录的代码就好了。androi...