zoukankan      html  css  js  c++  java
  • 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();
                });
            }
    View Code

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

  • 相关阅读:
    反射
    EFCore笔记之异步查询
    EFCore笔记之查询数据
    Json扩展 (转)
    C语言学习笔记之成员数组和指针
    asp中cookie欺骗/注入原理与防范
    简单的php Mysql类(查询 删除 更新)
    PHP四舍五入精确小数位及取整
    CentOS中配置LNMP环境打开提示File not found
    WIN中SharePoint Server 2010 入门安装部署详解
  • 原文地址:https://www.cnblogs.com/mbpframework/p/12073102.html
Copyright © 2011-2022 走看看