.Net Core通过json文件 配置管理后台导航菜单
先来看个最终效果图

以前我们配置后台菜单 一般都是把菜单链接, 图标, 以及层级关系 配置到数据库,Core很容易通过json文件来配置导航菜单 而不用存数据库了
先添加个menuconfig.json 文件,来看下json文件的结构

其中Url 就是链接地址,Icon就是要显示的图标 通过childs 这样层级关系就有了
在Startup.cs 里添加这个json配置文件
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile("menuconfig.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables(); Configuration = builder.Build();
}
注意 AddJsonFile 这个 第二个参数 optional: (Whether the file is optional)是否可选,意思是如果配置文件不存在的时候是否要抛异常。
第三个参数 reloadOnChange json文件更改后是否重新加载。
然后在 ConfigureServices 里做注册
services.Configure<MenuCollectionConfig>(Configuration.GetSection("MenuCollectionConfig"));
public class MenuCollectionConfig
{
public MenuItem[] MenuItems { get; set; }
} public class MenuItem
{
public string Name { get; set; } public string Resource { get; set; } public string Url { get; set; } public string SubNavUrl { get; set; } public string Icon { get; set; }
public MenuItem[] Childs { get; set; }
}
这样在Controller的 构造函数中注入
private readonly IOptions<MenuCollectionConfig> _menus;
public HomeController(
IOptions<MenuCollectionConfig> menus)
{
_menus = menus;
}
public IActionResult Index()
{
List<MenuItem> menus = new List<MenuItem>();
foreach(var item in _menus.Value.MenuItems)
{
List<MenuItem> secondChilds = CheckChilds(item.Childs);
if (secondChilds.Count > )
{
MenuItem newItem = new MenuItem();
newItem.Name = item.Name;
newItem.Icon = item.Icon;
newItem.Resource = item.Resource;
newItem.SubNavUrl = item.SubNavUrl;
newItem.Url = item.Url;
newItem.Childs = secondChilds.ToArray();
menus.Add(newItem);
}
}
MenuCollectionConfig config = new MenuCollectionConfig();
config.MenuItems = menus.ToArray();
ViewBag.Menus = JsonConvert.SerializeObject(config);
return View();
}
private List<MenuItem> CheckChilds(IEnumerable<MenuItem> childs)
{
List<MenuItem> result = new List<MenuItem>();
foreach (var item in childs)
{
if (item.Childs != null)
{
List<MenuItem> thirdLevelMenu = CheckChilds(item.Childs);
if (thirdLevelMenu.Count > )
{
MenuItem newItem = new MenuItem();
newItem.Name = item.Name;
newItem.Icon = item.Icon;
newItem.Resource = item.Resource;
newItem.SubNavUrl = item.SubNavUrl;
newItem.Url = item.Url;
newItem.Childs = thirdLevelMenu.ToArray();
result.Add(newItem);
}
}
else
{
result.Add(item);
}
}
return result;
}
注意 CheckChilds 方法里有个递归 这样无限层级的也能实现 当然后台最多3级也差不多了
博客经个人辛苦努力所得,如有转载会特别申明,博客所有权归本人和博客园所有,如有转载请在显著位置给出博文链接和作者姓名,否则本人将付诸法律
原文地址: https://www.cnblogs.com/alonglonga/p/11876300.html 小赫赫首发
有问题联系Q: 591811930
.Net Core通过json文件 配置管理后台导航菜单的更多相关文章
- ASP.NET Core appsettings.json 文件
ASP.NET Core appsettings.json 文件 在本节中,我们将讨论 ASP.NET Core 项目中appsettings.json文件的重要性. 在以前的 ASP.NET 版本中 ...
- ASP.NET Core launchsettings.json 文件
ASP.NET Core launchsettings.json 文件 在本节中,我们将讨论在 ASP.NET Core 项目中launchsettings.json文件的重要性. launchset ...
- ASP.NET Core 在 JSON 文件中配置依赖注入
前言 在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入. 在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等 ...
- 转载:ASP.NET Core 在 JSON 文件中配置依赖注入
在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等)时候,都是提供了专有的接口以供使用第三方的依赖注入组件,比如我们常用的会使用 Autofac.Untiy.Stri ...
- 使用.net core读取Json文件配置
1.使用vs2017创建一个应用台程序 2.使用程序包管理器控制台执行命令 Install-Package Microsoft.AspNetCore -Version 2.0.1 3.创建一个json ...
- .net core 读取json文件
核心代码 Program.cs: using System; using System.IO; using Microsoft.Extensions.Configuration; namespace ...
- opencart 后台导航菜单添加步骤
1,找到在catalog\language\english\common\header.php // Text$_['text_affiliate'] = 'Affiliates';$_['text_ ...
- WordPress主题开发:开启导航菜单功能
步骤一:开启导航菜单功能 <?php /* register_nav_menu( $location, $description ) 函数功能:开启导航菜单功能 @参数 string $loca ...
- .net core - 配置管理 - json文件配置
Json 文件配置 public class Startup { public Startup(IHostingEnvironment env) { var builder = new Configu ...
随机推荐
- spring源码系列(一):使用Gradle构建spring5源码的一些坑和步骤
源代码github: https://github.com/spring-projects/spring-framework.git 一 修改项目配置文件中gradle版本和地址 替换成本地安装的版 ...
- time 模块 和 random 模块常用方法讲解
import timeprint(help(time))print(time.time())#时间戳 1573991312.5361328print(time.perf_counter())#计算CP ...
- Kafka源码工程examples项目配置log4j
examples项目启动想知道有哪些错误,通过日志了解代码执行逻辑,但是启动SimpleConsumerDemo了报错如下: log4j.proproties也配置了 log4j.proproties ...
- Ceph 存储集群2-配置:心跳选项、OSD选项、存储池、归置组和 CRUSH 选项
一.心跳选项 完成基本配置后就可以部署.运行 Ceph 了.执行 ceph health 或 ceph -s 命令时,监视器会报告 Ceph 存储集群的当前状态.监视器通过让各 OSD 自己报告.并接 ...
- 办公环境下k8s网络互通方案
在 kubernetes 的网络模型中,基于官方默认的 CNI 网络插件 Flannel,这种 Overlay Network(覆盖网络)可以轻松的实现 pod 间网络的互通.当我们把基于 sprin ...
- printf的用法进阶
今天来好好总结一下C语言中关于printf的常用用法 基础部分 printf("%d\n", numInt); printf("%f\n", numFloat) ...
- Linux 内存分析工具——free命令
在Linux系统经常被用作服务器系统.当服务器内存吃紧的时候,free命令是我们最常使用的内存分析工具. free使用介绍 free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及 ...
- CSS实现按钮点击后根据背景色加深效果-一颗优雅草bigniu
具体代码如下 button{ position: relative; } button:active::before { display: block; content: ''; position: ...
- C++ 基础--虚构函数
virtual 函数 示例代码如下: #include <stdio.h> class base { public: virtual void name(){printf("ba ...
- 数据算法 --hadoop/spark数据处理技巧 --(9.基于内容的电影推荐 10. 使用马尔科夫模型的智能邮件营销)
九.基于内容的电影推荐 在基于内容的推荐系统中,我们得到的关于内容的信息越多,算法就会越复杂(设计的变量更多),不过推荐也会更准确,更合理. 本次基于评分,提供一个3阶段的MR解决方案来实现电影推荐. ...