Asp.net mvc 4 使用asp.net MVCSiteMapProvider v4和2个站点地图

Asp.net mvc 4 使用asp.net MVCSiteMapProvider v4和2个站点地图,asp.net-mvc-4,mvcsitemapprovider,Asp.net Mvc 4,Mvcsitemapprovider,您好,我想使用asp.net MVCSiteMapProvider v4和两个不同的站点地图,一个用于主站点,另一个用于管理区域。我做了一些搜索,发现您需要将其插入web.config: <siteMap defaultProvider="AppSiteMapProvider" enabled="true"> <providers> <clear /> <add name="AppSiteMapProvider" type="Mvc

您好,我想使用asp.net MVCSiteMapProvider v4和两个不同的站点地图,一个用于主站点,另一个用于管理区域。我做了一些搜索,发现您需要将其插入web.config:

 <siteMap defaultProvider="AppSiteMapProvider" enabled="true">
  <providers>
    <clear />
    <add name="AppSiteMapProvider" type="MvcSiteMapProvider.DefaultSiteMapProvider,
    MvcSiteMapProvider" siteMapFile="~/Mvc2.sitemap"
    securityTrimmingEnabled="true" cacheDuration="5"
    enableLocalization="true" scanAssembliesForSiteMapNodes="true" 
    includeAssembliesForScan="" excludeAssembliesForScan="" 
    attributesToIgnore="visibility"  
    nodeKeyGenerator="MvcSiteMapProvider.DefaultNodeKeyGenerator,
    MvcSiteMapProvider" 
    controllerTypeResolver="MvcSiteMapProvider.DefaultControllerTypeResolver, 
    MvcSiteMapProvider" 
    actionMethodParameterResolver="MvcSiteMapProvider.DefaultActionMethodParameterResolver, 
    MvcSiteMapProvider" aclModule="MvcSiteMapProvider.DefaultAclModule, 
    MvcSiteMapProvider" 
    siteMapNodeUrlResolver="MvcSiteMapProvider.DefaultSiteMapNodeUrlResolver, MvcSiteMapProvider" 
    siteMapNodeVisibilityProvider="MvcSiteMapProvider.DefaultSiteMapNodeVisibilityProvider, MvcSiteMapProvider" 
    siteMapProviderEventHandler="MvcSiteMapProvider.DefaultSiteMapProviderEventHandler, MvcSiteMapProvider" />

    <add name="AdminSiteMapProvider" type="MvcSiteMapProvider.DefaultSiteMapProvider,
    MvcSiteMapProvider" siteMapFile="~/Areas/Admin/Mvc.Sitemap" 
    securityTrimmingEnabled="true" cacheDuration="5" enableLocalization="true" 
    scanAssembliesForSiteMapNodes="true" includeAssembliesForScan="" 
    excludeAssembliesForScan="" attributesToIgnore="visibility" 
    nodeKeyGenerator="MvcSiteMapProvider.DefaultNodeKeyGenerator, MvcSiteMapProvider"
    controllerTypeResolver="MvcSiteMapProvider.DefaultControllerTypeResolver, MvcSiteMapProvider" 
    actionMethodParameterResolver="MvcSiteMapProvider.DefaultActionMethodParameterResolver, 
    MvcSiteMapProvider" aclModule="MvcSiteMapProvider.DefaultAclModule, MvcSiteMapProvider" 
    siteMapNodeUrlResolver="MvcSiteMapProvider.DefaultSiteMapNodeUrlResolver, MvcSiteMapProvider" 
    siteMapNodeVisibilityProvider="MvcSiteMapProvider.DefaultSiteMapNodeVisibilityProvider, MvcSiteMapProvider" 
    siteMapProviderEventHandler="MvcSiteMapProvider.DefaultSiteMapProviderEventHandler, MvcSiteMapProvider" />
  </providers>
</siteMap>
但它不起作用。 有人也有同样的问题吗??????? 顺便说一句,错误是:

Could not find file 'P:\MVCTest\MvcSite1\MvcSite1\Mvc.sitemap'. 
这就好像他们只是忽略了web.config

这些设置在使用v4时被忽略了。MvcSiteMapProvider不再使用Microsoft的站点地图提供程序模型,
部分可以完全从web.config中删除

要在一个应用程序中处理两个站点地图的需求,您需要使用依赖项注入容器并实现1或2个自定义类来将传入的HTTP请求映射到特定的站点地图实例

可以通过安装一个mvcsitemprovider.MVC[x].DI.[ContainerName]包来处理DI部分

ISitemApacheKeyGenerator根据HTTP请求提供“当前”站点地图的名称,ISitemApacheKeyToBuilderSetMapper告诉MvcSiteMapProvider要使用哪个构建器(可以为XML文件或其他源配置)

有关如何完成此操作的完整示例,请参见

Could not find file 'P:\MVCTest\MvcSite1\MvcSite1\Mvc.sitemap'.