You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core中IOptions解析SiteMap出现配置不一致问题求助

问题:IOptions模式下SiteMap配置对象出现一致性问题

我正在开发一个组件,负责解析appsettings中的SiteMap配置,再查询数据库渲染侧边菜单。使用IOptions模式时碰到了诡异的一致性问题:首次加载完全正常,但几次页面加载后,SiteMap对象会变得不完整,导致菜单渲染失败。

已经创建了匹配AppSettings的模型类,在Startup里完成了注册,而且首次启动时对象能正确填充,所以注册环节应该没问题。这个组件每次页面加载都会被调用,通过_Layout视图渲染。

SiteMap对象绑定成功
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:05:26