.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();
        }

能夠看到第一個頁面是自帶的頁面

 

而後咱們注入指定的地址 ,咱們的中間就基本處理好了

 固然這裏牢牢是基本,這樣基本瞭解了中間件的業務路數了

相關文章
相關標籤/搜索