.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(); }
能夠看到第一個頁面是自帶的頁面
而後咱們注入指定的地址 ,咱們的中間就基本處理好了
固然這裏牢牢是基本,這樣基本瞭解了中間件的業務路數了