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

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

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

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

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

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

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

在.netcore中你们常常会看到 app.usexxxx()  ,services.addxxxx()等形式的方法.net

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

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的一些服务htm

那么这个中间件要干什么呢?如实现某一个地址的时候显示一个页面,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();
        }

能够看到第一个页面是自带的页面

 

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

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

相关文章
相关标签/搜索