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.
- 我宁愿在全局范围内指定我的解析器,也不愿指定
urlResolver
属性。该属性首先违背了指定解析器的目的,这仅仅是为了清理和最小化站点地图文件。
- 一旦找到解析器,我就需要它工作
所以我猜是两个相关的问题。
MvcSiteMapProvider
v4 忽略旧版 ASP.NET 2.0 web.config 设置 - 这是设计使然。配置现在 100% 通过依赖项注入完成,但有一些 appSettings
可以用于基本配置,而无需使用外部 DI 容器。参考文档:
我的 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.
- 我宁愿在全局范围内指定我的解析器,也不愿指定
urlResolver
属性。该属性首先违背了指定解析器的目的,这仅仅是为了清理和最小化站点地图文件。 - 一旦找到解析器,我就需要它工作
所以我猜是两个相关的问题。
MvcSiteMapProvider
v4 忽略旧版 ASP.NET 2.0 web.config 设置 - 这是设计使然。配置现在 100% 通过依赖项注入完成,但有一些 appSettings
可以用于基本配置,而无需使用外部 DI 容器。参考文档: