• .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服务


    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作

    .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务

    .NetCore 下开发独立的(RPL)含有界面的组件包 (三)构建界面

    .NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤

    .NetCore 下开发独立的(RPL)含有界面的组件包 (五)授权过滤参数处 理

    .NetCore 下开发独立的(RPL)含有界面的组件包 (六)实现业务功能

    在.netcore中大家经常会看到 app.usexxxx()  ,services.addxxxx()等形式的方法

    接下来我们就来扩展下这个组件,新建了一个扩展类Idr4AdminChinaExtensions

    public static class Idr4AdminChinaExtensions
        {
    
            public static void UseAdminChina(this IApplicationBuilder app, Action<DashboardOptions> options = null)
            {
              /**/    
    
            }
            public static IServiceCollection AddAdminChina(this IIdentityServerBuilder services)
            {
              
                return services.Services;
            }
        }    

    这里我写了这样的两个扩展方法,一个用于扩展IApplicationBuilder实现中间件处理,一个扩展了IIdentityServerBuilder实现IdentityServer4的一些服务

    那么这个中间件要干什么呢?如实现某一个地址的时候显示一个页面,DashboardOptions是为了接受中间的参数信息,如hangfire的写法,你访问 localhost:10000/hangfire就会出现它的dashboard

     app.UseHangfireDashboard("/hangfire", new DashboardOptions
                {
                    Authorization = new[] { new DashboardAuthorizeFilter() }
                });

    好,接下来我们去添加中间件,我建立了中间价类

     关于中间这块之前有说过,主要就是对 RequestDelegate 的理解

    public class AdminChinaMiddeware
        {
            public RequestDelegate _next;
            private DashboardOptions _options;
            public AdminChinaMiddeware(RequestDelegate next, DashboardOptions options)
            {
                _next = next;
                _options = options;
            }
            public async Task Invoke(HttpContext context)
            {
              
              await _next(context);
            }
        }

    建立好中间件后,我们在扩展方法中添加

    public static void UseAdminChina(this IApplicationBuilder app, Action<DashboardOptions> options = null)
            {
            
                var dashboardOptions = new DashboardOptions();
                options?.Invoke(dashboardOptions);
                app.UseMiddleware<AdminChinaMiddeware>(dashboardOptions);
    
    
    
            }

    下面来看下DashbardOptions的处理,我没有直接指定地址,而是将地址放在了这个类中来处理,这里添加授权过滤接口,以便实现授权过滤处理

      public class DashboardOptions
        {
            public DashboardOptions()
            {
                AppPath = "/";
                PathRoute = "/adminchina";
                
            }
            /// <summary>
            /// 返回应用路径地址
            /// </summary>
            public string AppPath { get; set; }
            /// <summary>
            /// route 地址
            /// </summary>
            public string PathRoute { get; set; }
            
        }

    如果,你需要使用直接的地址可以使用Map来处理,如下接受一个pathstring的参数

    app.Map(new PathString("/adminchina"), appbuilder =>
                {
                    app.UseMiddleware<AdminChinaMiddeware>(dashboardOptions);
                });

    下面我们在中间中改一个输出看一看效果,在中间件类中添加如下输出我的名称,当路由到我指定的地址的时候 输出下我的名称

      string routeUrl = context.Request.Path;
                if (routeUrl.Equals(_options.PathRoute))
                {
                    await context.Response.WriteAsync("liyouming");
                }
    
                else
                {
                    await _next(context);
                }

    接下里在这里添加引用,并在Startup里面写上我们的中中间件运行

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Error");
                }
                app.UseAdminChina();
                app.UseStaticFiles();
                app.UseCookiePolicy();
    
                app.UseMvc();
            }

    可以看到第一个页面是自带的页面

    然后我们注入指定的地址 ,我们的中间就基本处理好了

     当然这里紧紧是基本,这样基本了解了中间件的业务路数了

  • 相关阅读:
    关于PTA平台上使用python2/3书写代码误判问题
    随笔小记--乔帮主传
    随笔小记--读李安传
    Git与GitHub的简单了解(3)
    Git与GitHub的简单了解(2)
    Git与GitHub的简单了解(1)
    学习SFrame,根据GraphLab库
    结课:应用实例--照片字符识别 (photo OCR)
    大数据下的机器学习
    Java8之Stream用法
  • 原文地址:https://www.cnblogs.com/liyouming/p/10191967.html
Copyright © 2020-2023  润新知