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?}");
});