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 应用的.

原文地址:https://www.cnblogs.com/mbpframework/p/12073102.html

时间: 2024-10-09 08:09:37

Mbp,一个用于学习.net core的开发框架的相关文章

学习.net core mvc 做的一个在线房间棋牌游戏微信支付和及时通讯简易框架

项目名称:游戏城(GameCitysSystem) 源代码github地址:https://github.com/antdesigner/appleGameSVN 开发工具:vs2017 数据库:mysql5.7 因为项目目前不完善,有一些注意事项 利用 "applegameData.sql" 文件初始化mysql数据库,数据库名称为 applegame 连接字符串在appsettings对应文件ConnectionStrings节点中配置 访问地址为: http://127.0.0:

CoreData学习:Core Data Stack(Swift)

Core Data是苹果官方提供的一套框架,用来解决对象生命周期管理.对象关系图管理和持久化等方面相关的问题.Core Data是模型层的技术,Core Data帮助你构建代表程序状态的模型层.Core Data也是一种持久化技术,它可以将模型的状态持久化到磁盘.但它更重要的特点是:Core Data不只是一个加载和保存数据的框架,它也能处理内存中的数据. 什么是Core Data? 对于Core Data框架将经常困惑,以为是数据库.其实Core Data并不是数据库.如果它不是数据库,那么C

让一个 csproj 项目指定多个开发框架[转]

原贴:https://walterlv.gitee.io/post/configure-projects-to-target-multiple-platforms.html 可移植类库.共享项目..NET Standard 项目都能够帮我们完成跨多个 .NET SDK 的单一项目开发,但它们的跨 SDK 开发都有些限制.现在,我们又有新的方式能够跨多个 .NET SDK 开发了,这就是使用新的 csproj 文件格式. 看看拥有多个开发框架的项目长什么样吧! 这个是我和 erdao 在 GitH

OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Hangfire使用

OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. OsharpNS.Swagger使用实例(登录和授权) 1.4. Angular6的前端项目启动 Osharp代码生成器的使用 2.1 生成器的使用 2.2 生成代码详解(如何自己实现业务功能) Osharp部分模块使用 3.1 Osharp.Redis使用 3.2 Osharp.Hangfire使用

Facebook开源游戏平台ELF: 一个用于实时战略游戏研究的轻量级平台

ELF是一个用于游戏研究的应用广泛的(Extensive).轻量级的(Lightweight).灵活的(Flexible)平台,特别适用于实时战略(RTS)游戏.在C++方面,ELF采用C++线程来并发运行多个游戏.在Python方面,ELF可以一次性返回一批游戏状态,使其对现代RL(强化学习)非常友好.另一方面,在其他平台(例如OpenAI Gym)中,一个Python接口只能包含一个游戏实例.这使得游戏的并发运行有点复杂,而这又是许多现代强化学习算法的要求. 对于RTS游戏的研究,ELF配备

一个用于网站自动化测试的生态系统实现

这是我在从事网站自动化测试的工作当中构建出的一个"生态系统"."生态系统"这个概念是我从公司的前辈身上学到的,他一直以来都认为自动化测试人员不应仅仅局限于编写测试代码,还应该让整个自动化测试的过程(测试代码的持续集成.分发.执行等)都自动化,形成一个"系统",这个系统的自动化程度越高,自动化测试人员就越省力. 一.概念 这里我画了一张示意图: 之所以称之为"生态系统",是因为建成之后需要的人为干涉很少,其余的时间都是系统内部循

一个asp.net mvc的快速开发框架

闲来无事,自己写了一个asp.net mvc的快速开发框架,这是一个早期版本,也没仔细打包,大家凑合着看. 我把数据库转换了compact ce,本地除了需要有.net4.0运行库,不需要部署任何东西,只要运行shrimp.exe即可,第一次运行读取数据库可能速度慢了一点,第二次就好了. 这个快速开发框架主要用于B/S企业管理类软件的快速开发,适合根据数据库生成标准网页,大大节省了写代码的时间.框架主要包括以下几个部分及特点: 1.登陆模块.系统底层有防网址输入功能,不需要在每个模块写任何过滤器

搭建一个新手学习AI/ML的Python环境

不知不觉消失了好久,公众号也很久没有更新了.因为跑去学习微软AI方向的MPP课程了.MPP是目前微软最先提供关于AI的培训课程,关于MPP的学习体系,我后面会再写一篇简单的介绍. ???? MPP包含了很多的内容,开始学习的时候速度还挺快,到后面越来越艰涩.这也是很久没有精力去更新内容的原因之一.在学习的过程中,逐步接触到了AI或者ML所需要的Python环境.还记得我们之前的介绍吗?通过Python去调用AI的很多API,来快速实现AI的一些功能. ??? 在学习Azure AI的API的eD

大数据技术之_19_Spark学习_02_Spark Core 应用解析+ RDD 概念 + RDD 编程 + 键值对 RDD + 数据读取与保存主要方式 + RDD 编程进阶 + Spark Core 实例练习

第1章 RDD 概念1.1 RDD 为什么会产生1.2 RDD 概述1.2.1 什么是 RDD1.2.2 RDD 的属性1.3 RDD 弹性1.4 RDD 特点1.4.1 分区1.4.2 只读1.4.3 依赖1.4.4 缓存1.4.5 CheckPoint第2章 RDD 编程2.1 RDD 编程模型2.2 RDD 创建2.2.1 由一个已经存在的 Scala 集合创建,即集合并行化(测试用)2.2.2 由外部存储系统的数据集创建(开发用)2.3 RDD 编程2.3.1 Transformatio