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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  6. Razor Page Library:开发独立通用RPL(内嵌wwwroot资源文件夹)

    ASP.NET Core知多少系列:总体介绍及目录 Demo路径:GitHub-RPL.Demo 1. Introduction Razor Page Library 是ASP.NET Core 2. ...

  7. 在winform下实现左右布局多窗口界面的方法(二)

    这篇文章主要介绍了在winform下实现左右布局多窗口界面的方法之续篇 的相关资料,需要的朋友可以参考下 在上篇文章在winform下实现左右布局多窗口界面的方法(一)已经实现了左右布局多窗口界面,今 ...

  8. 关于在Java EE 下开发web,出现项目中的外部包没有tomcat的包的原因

    在新建的项目的时候,要设置目标服务器运行环境,把那个设置成tomcat,这样,项目中就会有tomca的api

  9. 在winform下实现左右布局多窗口界面的方法(一)

    在web页面上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界面,而在winform.WPF中实现其实也很容易,通过本文给大家介绍在winform下实现左右布局多窗口 ...

随机推荐

  1. (转载)深度学习的weight initialization

    本文转自:谷歌工程师:聊一聊深度学习的weight initialization TLDR (or the take-away) Weight Initialization matters!!! 深度 ...

  2. java二分查找

    二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表 ...

  3. (并发编程)RLock(与死锁现象),Semaphore,Even事件,线程Queue

    一.死锁现象与递归锁所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在 ...

  4. python操作mysql数据库增删改查的dbutils实例

    python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...

  5. mybatis打印SQL日志

    在配置的log4j输出时,不能打印SQL信息,在mybatis-config.xml中添加如下配置即可 <settings> <setting name="logImpl& ...

  6. Expm 10_2 实现Ford-Fulkerson算法,求出给定图中从源点s到汇点t的最大流,并输出最小割。

    package org.xiu68.exp.exp10; import java.util.ArrayDeque; import java.util.ArrayList; import java.ut ...

  7. 用puttygen工具把私钥id_rsa转换成公钥id_rsa.ppk

    1 前言 有时候需要ppk格式的公钥,可以用putty来处理 2 步骤 1. 产生密钥 可以参考Gitlab的SSH配置(linux和windows双版本) $ ssh-keygen -t rsa - ...

  8. linq基本操作

    一.Linq有两种语法: 1.  方法语法 2.  查询语法 下面举个例子看看这两种方法的区别 比如现在有一个学生类 public class student { public string user ...

  9. jmeter测试mysql遇到的问题

    1. 1.防火墙未关 错误: Communications link failure The last packet sent successfully to the server was 0 mil ...

  10. Confluence 6 连接到 Jira 用户管理的限制

    当你在使用 JIRA 目录为用户目录的时候,请考虑下面的一些限制和建议. 不知道跨平台的多应用单点登录 当你使用 JIRA 为你的目录管理器的时候,系统将不能支持跨平台的单点登录.当 JIRA 用作目 ...