.NET Core中IOptions解析SiteMap出现配置不一致问题求助
问题:IOptions模式下SiteMap配置对象出现一致性问题
我正在开发一个组件,负责解析appsettings中的SiteMap配置,再查询数据库渲染侧边菜单。使用IOptions模式时碰到了诡异的一致性问题:首次加载完全正常,但几次页面加载后,SiteMap对象会变得不完整,导致菜单渲染失败。
已经创建了匹配AppSettings的模型类,在Startup里完成了注册,而且首次启动时对象能正确填充,所以注册环节应该没问题。这个组件每次页面加载都会被调用,通过_Layout视图渲染。
SiteMap对象绑定成功
两次页面加载后,某节点子项丢失
appsettings完全没修改,为什么配置值会发生变化?
模型类代码
public class SiteMap { public List<SiteMapNode> Nodes { get; set; } } public class SiteMapNode { public string ResourceName { get; set; } public string Href { get; set; } public string Icon { get; set; } public string Roles { get; set; } public int PrestationCount { get; set; } public List<SiteMapNode> Children { get; set; } }
启动时配置注册代码
builder.Services.Configure<SiteMap>(builder.Configuration.GetSection("SiteMap"));
appsettings中的SiteMap配置片段
{ ... "SiteMap": { "nodes": [ { "ResourceName": "Accueil", "Href": "/", "Icon": "fas fa-home", "Roles": "*", "Children": null }, { "ResourceName": "MonProfil", "Href": "--dropdown", "Icon": "flaticon2-user", "Roles": "*", "Children": [ { "ResourceName": "Parametres", "Href": "--dropdown", "Icon": "flaticon2-settings", "Roles": "*", "Children": [ { "ResourceName": "CorrigerAdresse", "Href": "/account/address-error", "Icon": "fas fa-map-marker-alt", "Roles": "*", "Children": null }, { "ResourceName": "AnnoncerDemenagement", "Href": "/account/relocation", "Icon": "fas fa-house-user", "Roles": "*", "Children": null }, { "ResourceName": "ChangementTitulaire", "Href": "/account/ownership", "Icon": "fas fa-user-edit", "Roles": "*", "Children": null } ] }, { "ResourceName": "Factures", "Href": "/invoices", "Icon": "flaticon-layer", "Roles": "*", "Children": null }, { "ResourceName": "ModeFacturation", "Href": "/account/billing", "Icon": "fas fa-file-invoice-dollar", "Roles": "*", "Children": null }, { "ResourceName": "ChangerMotDePasse", "Href": "/account/change-password", "Icon": "fas fa-key", "Roles": "*", "Children": null } ] }, { "ResourceName": "MesPrestations", "Href": "--dropdown", "Icon": "fas fa-box-open", "Roles": "*", "Children": [ { "ResourceName": "TelephonieInternet", "Href": "/prestation/voip", "Icon": "flaticon2-phone", "Roles": "*", "Children": null }, { "ResourceName": "Mobile", "Href": "/prestation/mobile", "Icon": "fa fa-mobile", "Roles": "*", "Children": null }, { "ResourceName": "ConnexionInternet", "Href": "/prestation/internet", "Icon": "flaticon2-world", "Roles": "*", "Children": null }, { "ResourceName": "MyCanal", "Href": "/prestation/tv", "Icon": "fas fa-tv", "Roles": "*", "Children": null } ] }, { "ResourceName": "Partenaire", "Href": "--dropdown", "Icon": "far fa-handshake", "Roles": "partner", "Children": [ { "ResourceName": "Clients", "Href": "/partner/clients", "Icon": "flaticon-users-1", "Roles": "partner", "Children": null }, { "ResourceName": "StatistiquesParJour", "Href": "/partner/daily-stats", "Icon": "flaticon2-pie-chart-1", "Roles": "partner", "Children": null }, { "ResourceName": "StatistiquesParClient", "Href": "/partner/client-stats", "Icon": "fas fa-chart-bar", "Roles": "partner", "Children": null }, { "ResourceName": "Documentation", "Href": "/partner/documentation", "Icon": "flaticon2-open-text-book", "Roles": "partner", "Children": null } ] } ] } }
有人遇到过类似问题吗?或者有什么解决思路?
内容的提问来源于stack exchange,提问作者corentin_chap
相关产品推荐
相关产品推荐

