netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源介绍
GitHub:https://github.com/yuzd/AntMgr
csporj文件修改如上图:
将TargetFramework 由 【netcoreapp2.2】 变更成 【netcoreapp3.1】
由于使用的是Razor渲染 新增 <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
如上图,删除以下包,因为在aspnetcore3.1 sdk是自带了
Microsoft.AspNetCore.App
Microsoft.AspNetCore.Razor.Design
Microsoft.VisualStudio.Web.CodeGeneration.Design
由于我使用了 NewtonsoftJson 新增
Microsoft.AspNetCore.Mvc.NewtonsoftJson 包
Program.cs文件里面的Host初始化代码修改老的方式:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .ConfigureLogging() .UseNLog(); }新的方式如下面:
如果搭配autofac的话:
需要添加最新版本的Autofac.Extensions.DependencyInjection
如下新增 .UseServiceProviderFactory(new AutofacServiceProviderFactory())
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceProviderFactory(new AutofacServiceProviderFactory()) //这里是autofac配合3.1的新方式 .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .ConfigureLogging() .UseNLog(); }); } StartUp.cs文件变更 针对autofac的改动下面是老的方式 返回一个 被autofac包装的 IServiceProvider
public IServiceProvider ConfigureServices(IServiceCollection services) { }下面是新的方式
// 添加这个 是为了生成一个 容器 在别的地方使用 public ILifetimeScope AutofacContainer { get; private set; } // 由于在 program.cs里面注册了 autofac 的 factory 所以会走进来 public void ConfigureContainer(ContainerBuilder builder) { //autofac打标签模式 文档:https://github.com/yuzd/Autofac.Annotation builder.RegisterModule(new AutofacAnnotationModule( this.GetType().Assembly, typeof(BaseRepository<>).Assembly, typeof(HttpContext).Assembly) .SetAllowCircularDependencies(true) .SetDefaultAutofacScopeToInstancePerLifetimeScope()); } 注册mvc的方式改动下面是老的方式:
app.UseMvc(routes => { // areas routes.MapRoute( name: "Admin", template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });下面是新的方式:
app.UseRouting(); app.UseCors();//注意 这个必须放在 中间 app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapRazorPages(); endpoints.MapAreaControllerRoute( name: "Admin", "Admin", pattern: "Admin/{controller=Home}/{action=Index}/{id?}"); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); 用json需要另外配置下不然默认返回的第一个字母是小写的 autofac容器想要在别的层使用