Mbp,一个用于学习.net core的开发框架
mbp(https://github.com/mbpframework/mbp)是一个.net core 3的企业级web开发框架,是我个人用于学习.net core而发起的一个开源项目.这个借鉴了国外优秀开源项目abp vnext,及国内优秀开源框架osharp的一些思想和实现.欢迎各路开发爱好者加入这个项目,一起学习,一起玩耍,共同成长!
mbp目前有:
简单的模块化系统,
基于jwt的统一身份验证,
基于角色和自定义策略的统一授权系统,
集成了swagger ui的poco controller
集成了ef core
提供aop机制
后面还会继续加入hangfire,ientityserver4,nservicebus,rabbitmq,signalr,redis,ml,es,multitenancy,virtualfilesystem等等.
下面简单介绍一下mbp的这个框架吧.首先介绍下整个模块化框架的构成.
1.模块按照等级分为核心模块,组件级模块和应用级模块.核心模块默认为mbp.core.框架里面其他的模块都为组件级模块,模块之间会按照依赖关系顺序加载(这是一个to do项).因为目前模块比较少,启动也不会出问题,后续指定了依赖关系就会好很多拉.运行的时候mbp会作为一个中间件加入到asp.net core的管道中.
public void configure(iapplicationbuilder app, iwebhostenvironment env) { if (env.isdevelopment()) { app.usedeveloperexceptionpage(); } // 使用医学大数据开发平台框架 app.usemedicalframework(); // 路由中间件 app.userouting(); // 鉴权中间件 app.useauthorization(); // 路由终结点配置 开启终结点之后,mbp的权限过滤器将以中间件的形式独立运行,不会再添加到actiondescriptor // 也就是说,我们不要选择以这种方式来拦截和自定义鉴权算法 app.useendpoints(endpoints => { endpoints.mapcontrollers(); }); }
2.mbp.core是框架的核心,其主要职责是将其他模块的服务注册到依赖注入系统中,同时把相关的中间件加到asp.net core管道中.同时提供了一些底层的抽象定义.
3.mbp.aspnetcore是针对asp.net core体系封装的一个基本模块,同时这也是mbp一个很重要的模块,很多模块都继承了它.这个模块的主要职责是实现了poco controller和一些筛选器以级基本的asp,net core的设置都在这个模块做定义.
4.mbp.entityframeworkcore,这是对ef core的一个封装的模块,这个模块主要定义了mbp作为一个企业级开发框架的基本主数据.包括用户,角色,菜单,权限,操作日志等(这个模块有个to do项就是要支持主数据的扩展)
5.mbp.authentication,是统一授权管理,其主要职责是定义了框架的授权策略
public override iservicecollection addservices(iservicecollection services) { // 添加全局授权策略 services.addauthorization(options => { options.addpolicy("globalpermission", policy => policy.requirements.add(new permissionrequirement())); }); return base.addservices(services); }
6.mbp.authentication.jwtbearer,是统一身份验证模块,其职责是配置授权身份认证,包括身份标识,设置验证参数,设置验证事件.
public override iservicecollection addservices(iservicecollection services) { var serviceprovider = services.buildserviceprovider(); var jwtconfig = serviceprovider.getservice<ioptions<mbpconfig>>().value?.jwt; services.tryaddscoped<ijwtbearerservice, jwtbearerservice>(); //配置授权 services.addauthentication(options => { options.defaultauthenticatescheme = jwtbearerdefaults.authenticationscheme; options.defaultchallengescheme = jwtbearerdefaults.authenticationscheme; }).addjwtbearer(jwtbeareroptions => { // 设置验证参数 jwtbeareroptions.tokenvalidationparameters = new tokenvalidationparameters { validateissuersigningkey = true, issuersigningkey = new symmetricsecuritykey(system.text.encoding.utf8.getbytes(jwtconfig.securitykey)), validateissuer = true, validissuer = jwtconfig.issuer, validateaudience = true, validaudience = jwtconfig.audience, validatelifetime = true, clockskew = timespan.fromminutes(jwtconfig.timeout) }; // 设置验证事件 jwtbeareroptions.events = new jwtbearerevents { onauthenticationfailed = context => { if (context.exception.gettype() == typeof(securitytokenexpiredexception)) { context.response.headers.add("action", "timeout"); } return task.completedtask; } }; }); return base.addservices(services); } public override void usemodule(iapplicationbuilder app) { app.useauthentication(); base.usemodule(app); }
6.mbp.ddd.application,此模块主要是为了辅助实施ddd而做的,其主要职责是负责ddd应用层的相关能力的提供,比如定义dto,扩展分页查询.
7.mbp.swagger,此模块是为框架提供web api接口ui界面.
8.mbp.logdashboard,此模块是为框架提供框架运行日志分析的ui界面.
下一节,将介绍我是如何用这些模块构建一个web 应用的.
上一篇: SpringMVC 五大组件
推荐阅读
-
【iOS】一个取巧的弹出式动画实现以及后续的iOS动画学习(第一部分:基于CALayer的Core Animation框架)
-
分享一个集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的入门级微服务开发框架
-
Mbp,一个用于学习.net core的开发框架
-
一个基于Net Core3.0的WPF框架Hello World实例
-
分享一个基于Net Core 3.1开发的模块化的项目
-
一个基于 .NET Core 2.0 开发的简单易用的快速开发框架 - LinFx
-
一个轻量级的基于 .NET Core 的 ORM 框架 HSQL
-
第一章 搭建一个通用的.net core项目框架
-
基于ASP.Net Core开发的一套通用后台框架
-
Mockito:一个强大的用于 Java 开发的模拟测试框架实例