Mbp(https://github.com/mbpframework/Mbp)是一個.net core 3的企業級web開發框架,是我個人用於學習.net core而發起的一個開源項目.這個借鑒了國外優秀開源項目abp vnext,及國內優秀開源框架Osharp的一些思想和實現.歡迎各路開發愛好者 ...
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 應用的.