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

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

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

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

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

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

这里们来做一个简单的业务列表功能,这里我就先来做一个Cient列表

一如以往,先添加页面

当然需要在界面上写上我们的列表语法,razorview会处理@符号的后台代码,这里我们制定了我们的数据源是dataSoure,当然这里是会报错的,但是没关系,因为最后执行都是ClientsIndex.Designer.cs类

 @foreach (var item in dataSource)
{
<tr>
<td>
<div class="layui-unselect layui-form-checkbox" lay-skin="primary" data-id='@item.ClientId'><i class="layui-icon"></i></div>
</td>
<td>@item.ClientName</td> <td class="td-manage">
<a href="javascript:;" title="编辑" ><i class="layui-icon"> </i>编辑</a>
<a href="javascript:;" title="删除" ><i class="layui-icon"> </i>删除</a> </td>
</tr>
}

运行命令 dotnet razorpagegenerator IdentityServer4.AdminChina 生成下视图

可以看到生成是视图代码,淡然这里的dataSource是找不到的,可以在视图上加上一些命名空间的引用以及写好的服务的操作代码,后面就不需要在视图类中去修改了

  foreach (var item in dataSource)
{ #line default
#line hidden
WriteLiteral(" <tr>\r\n <td>\r\n <div class=\"layui-unselect layui-form-checkbox\" lay-skin=\"primary\" data-id=\'");
#line 56 "ClientsIndex.cshtml"
Write(item.ClientId); #line default
#line hidden
WriteLiteral("\'><i class=\"layui-icon\"></i></div>\r\n </td>\r\n <td>");
#line 58 "ClientsIndex.cshtml"
Write(item.ClientName); #line default
#line hidden
WriteLiteral(@"</td> <td class=""td-manage"">
<a href=""javascript:;"" title=""编辑"" ><i class=""layui-icon""> </i>编辑</a>
<a href=""javascript:;"" title=""删除"" ><i class=""layui-icon""> </i>删除</a> </td>
</tr>
");

下面就们就来为我们的dataSource做准备了

构建服务相关类

接口中定义个获取数据的方法

public interface ICustomClientServies
{
List<ClientModel> GetClients();
}
 public class CustomClientServies : ICustomClientServies
{
//private readonly XXXDbContext _dbContext
//public CustomClientServies(XXXDbContext dbContext)
//{
// _dbContext = dbContext;
//}
public List<ClientModel> GetClients()
{
return new List<ClientModel>
{
new ClientModel{ ClientId=, ClientName="Implicit" },
new ClientModel{ ClientId=,ClientName="Hybrid" },
new ClientModel{ClientId=, ClientName="ClientCredintials" },
new ClientModel{ClientId=, ClientName="AuthorizationCode" },
};
}
}

这里实现我就不操作数据库了,如果需要操作数据库或者使用IdentityServer4的上下文对象都是可以的,如上面注释部分一样,这里添加几条模拟数据,写了这些还不够,我们还需要将我们的Client服务DI

所以这里我们还需要扩展IServiceCollection对象,这里我们在扩展类中添加这个扩展,淡然你也可以写对IIdentityServerBuilder(IdentityServer4)的扩展

 public static IServiceCollection AddAdminChina(this IServiceCollection services)
{
services.AddScoped<ICustomClientServies, CustomClientServies>();
return services;
}

接下来我们来视图类中处理我们的服务类,说到这里我们来看下BaseView这个视图基类里面都有什么?

 protected HttpContext Context { get; private set; }

        /// <summary>
/// The request
/// </summary>
protected HttpRequest Request { get; private set; } /// <summary>
/// The response
/// </summary>
public HttpResponse Response { get; private set; }

下面这三个对象都是BaseView提供给我们的,而我们的视图类继承了这个基类,所以可以想到从RequestServices拿到服务就轻而易举了,接下来修改代码,在视图类中添加对datasource的构造,这样数据就应该没有问题了,我种类就写一个列表了,当然如果你要分页,接受参数 ,判断 获取身份信息状态等等都能搞定,就因为有上面的上个对象,当然如果你中间件获取了使用用户的敏感信息,那么你这个中间件肯定就不安全了,比如你获取access_token之类的操作

 var services = Request.HttpContext.RequestServices.GetService(typeof(ICustomClientServies)) as ICustomClientServies;
var dataSource = services.GetClients();
 var services = Request.HttpContext.RequestServices.GetService(typeof(ICustomClientServies)) as ICustomClientServies;
var dataSource = services.GetClients();
foreach (var item in dataSource)
{ #line default
#line hidden
WriteLiteral(" <tr>\r\n <td>\r\n <div class=\"layui-unselect layui-form-checkbox\" lay-skin=\"primary\" data-id=\'");
#line 58 "ClientsIndex.cshtml"
Write(item.ClientId); #line default
#line hidden
WriteLiteral("\'><i class=\"layui-icon\"></i></div>\r\n </td>\r\n <td>");
#line 60 "ClientsIndex.cshtml"
Write(item.ClientName);

最后一步在中间件中加上我们的Client视图路由,这里就不贴了,然后我们在WebTest服务中添加服务扩展

 public void ConfigureServices(IServiceCollection services)
{
services.AddAdminChina();
}

这里去掉上一篇中的根据参数判断权限的代码,实际操作不会这么处理,毕竟其他的路由地址不会携带这个参数,以及在视图中添加好我们的服务用与生成视图类。还有就是中间件地址需要动态处理,这就不多说了,下面看下实际的效果,访问我们的Client管理 列表页面就出来了

好了,关于这块的就说了,相信写一个独立的RPL包应该不是问题了

.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. 关于在Java EE 下开发web,出现项目中的外部包没有tomcat的包的原因

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

  8. 在桌面Linux环境下开发图形界面程序的方案对比

    在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...

  9. .netcore下的微服务、容器、运维、自动化发布

    原文:.netcore下的微服务.容器.运维.自动化发布 微服务 1.1     基本概念 1.1.1       什么是微服务? 微服务架构是SOA思想某一种具体实现.是一种将单应用程序作为一套小型 ...

随机推荐

  1. mysql 二进包在linux下安装过程

    cp mysql-5.6.17-linux-glibc2.5-i686 /usr/local/mysql -r groupadd mysql和useradd -r -g mysql mysql 进入安 ...

  2. mac使用技巧之截图

    1.选定区域截图 command+shift+3 选定区域按住control,可以直接截图到剪切板, 按option可以进行比例缩放. 按住shift可以选定区域 按住空格键可以进入窗口截图模式. 2 ...

  3. 利用iscroll实现上拉加载下拉刷新

    1.首先引用isScroll插件 说明:页面加载时初始化isScroll,然后调用pullDownAction()和pullUpAction(),每次切换tab时,只需要对pullDownAction ...

  4. xpath 中 [<Element a at 3985984dj343>]

    在写爬虫用xpath抓取数据的时候出现了这个问题,列表中都是很多个 < element > 首先这不是报错,也不是你的xpath语法有错. 将这个数据列表循环,循环出的item就是你想要的 ...

  5. 关于VC工程编译不过去这件事

    刚开始接触VC的时候,很大一部分时间是在对付编译链接错误,因为经验不足的原因,这些编译链接总让人很沮丧.比如: 1.fatal error LNK1104: 无法打开文件“LIBC.lib”错误 这个 ...

  6. codeforces 38G - Queue splay伸展树

    题目 https://codeforces.com/problemset/problem/38/G 题意: 一些人按顺序进入队列,每个人有两个属性,地位$A$和能力$C$ 每个人进入时都在队尾,并最多 ...

  7. canvas - 钟表

    Demo : Demo Demo截图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta ...

  8. windows下安装Rabbitmq详解

    RabbitMQ是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang. 1.什么是Erlang? Erlang(['ə:læŋ])是一种通用的面向并发的编程语言 ...

  9. Python-面向对象(组合、封装与多态)

    一.组合 什么是组合? 就是一个类的属性 的类型 是另一个自定义类的 类型,也可以说是某一个对象拥有一个属性,该属性的值是另一个类的对象. 通过为某一个对象添加属性(这里的属性是另一个类的对象)的方式 ...

  10. Fiddler 抓包工具

    序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的 ...