web.config 站点地图元素被忽略

web.config siteMap element ignored

我的 web.config 中的 siteMap 元素被忽略了。为什么是这样? 我的 objective 是让 siteMapNodeUrlResolver 生效。

web.config

  <system.web>
    <siteMap defaultProvider="MvcSiteMapProvider" enabled="true">
      <providers>
        <clear />
        <add name="MvcSiteMapProvider"
             type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider"
             siteMapFile=""
             securityTrimmingEnabled="true"
             cacheDuration="5"
             enableLocalization="false"
             scanAssembliesForSiteMapNodes="true"
             excludeAssembliesForScan=""
             includeAssembliesForScan="AACOMvc"
             attributesToIgnore=""
             nodeKeyGenerator="MvcSiteMapProvider.DefaultNodeKeyGenerator, MvcSiteMapProvider"
             controllerTypeResolver="MvcSiteMapProvider.DefaultControllerTypeResolver, MvcSiteMapProvider"
             actionMethodParameterResolver="MvcSiteMapProvider.DefaultActionMethodParameterResolver, MvcSiteMapProvider"
             aclModule="MvcSiteMapProvider.DefaultAclModule, MvcSiteMapProvider"
             siteMapNodeUrlResolver="AACOMvc.SiteMapNodeUrlResolver, AACOMvc"
             siteMapNodeVisibilityProvider="MvcSiteMapProvider.DefaultSiteMapNodeVisibilityProvider, MvcSiteMapProvider"
             siteMapProviderEventHandler="MvcSiteMapProvider.DefaultSiteMapProviderEventHandler, MvcSiteMapProvider"
         />
      </providers>
    </siteMap>
    <pages>
      <namespaces>
        <add namespace="MvcSiteMapProvider.Web.Html" />
        <add namespace="MvcSiteMapProvider.Web.Html.Models" />
      </namespaces>
    </pages>
  </system.web>

SiteMapNodeUrlResolver.cs

using MvcSiteMapProvider;
using MvcSiteMapProvider.Web.UrlResolver;
using System;
using System.Collections.Generic;

namespace AACOMvc
{
  public class SiteMapNodeUrlResolver : ISiteMapNodeUrlResolver
  {
    public SiteMapNodeUrlResolver() : base() { }

    public bool AppliesTo(string providerName)
    {
      throw new NotImplementedException(); // line never executes
    }

    public string ResolveUrl(ISiteMapNode node, string area, string controller, string action, IDictionary<string, object> routeValues)
    {
      throw new NotImplementedException(); // line never executes
    }
  }
}

当我通过在节点上设置 urlResolver 属性帮助提供商找到我的解析器时,它找到了。但后来我得到:

Exception Details: System.MissingMethodException: Constructor on type 'AACOMvc.SiteMapNodeUrlResolver' not found.

  1. 我宁愿在全局范围内指定我的解析器,也不愿指定 urlResolver 属性。该属性首先违背了指定解析器的目的,这仅仅是为了清理和最小化站点地图文件。
  2. 一旦找到解析器,我就需要它工作

所以我猜是两个相关的问题。

MvcSiteMapProvider v4 忽略旧版 ASP.NET 2.0 web.config 设置 - 这是设计使然。配置现在 100% 通过依赖项注入完成,但有一些 appSettings 可以用于基本配置,而无需使用外部 DI 容器。参考文档: