.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(); }
可以看到第一个页面是自带的页面
然后我们注入指定的地址 ,我们的中间就基本处理好了
当然这里紧紧是基本,这样基本了解了中间件的业务路数了