web.config siteMap元素被忽略

时间:2016-11-02 18:14:43

标签: mvcsitemapprovider

我的siteMap中的web.config元素被忽略了。为什么是这样? 我的目标是让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属性来帮助提供程序找到我的解析程序时,它会找到它。但后来我得到了:

  

异常详细信息:System.MissingMethodException:类型上的构造函数   &#39; AACOMvc.SiteMapNodeUrlResolver&#39;没找到。

  1. 我宁愿全局指定我的解析器而不是指定urlResolver属性。该属性首先破坏了指定解析器的目的,这只是为了清理和最小化站点地图文件。
  2. 找到解析器后我需要它才能正常工作
  3. 所以我猜两个相关的问题。

1 个答案:

答案 0 :(得分:0)

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