Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MvcSiteMapProvider MVC5自动生成站点地图_C#_Asp.net Mvc_Mvcsitemapprovider - Fatal编程技术网

C# MvcSiteMapProvider MVC5自动生成站点地图

C# MvcSiteMapProvider MVC5自动生成站点地图,c#,asp.net-mvc,mvcsitemapprovider,C#,Asp.net Mvc,Mvcsitemapprovider,我正在尝试自动生成网站地图,我使用以下 Web.config: <appSettings> <add key="MvcSiteMapProvider_IncludeAssembliesForScan" value="WebUI" /> <add key="MvcSiteMapProvider_ScanAssembliesForSiteMapNodes" value="true" /> <add key="MvcSite

我正在尝试自动生成网站地图,我使用以下 Web.config:

<appSettings>
  <add key="MvcSiteMapProvider_IncludeAssembliesForScan" value="WebUI" />
        <add key="MvcSiteMapProvider_ScanAssembliesForSiteMapNodes" value="true" />
        <add key="MvcSiteMapProvider_UseExternalDIContainer" value="false" />
    <add key="MvcSiteMapProvider_UseExternalDIContainer" value="false"/>
    <add key="MvcSiteMapProvider_SiteMapFileName" value="~/Mvc.sitemap"/>

    <add key="MvcSiteMapProvider_ExcludeAssembliesForScan" value=""/>
    <add key="MvcSiteMapProvider_IncludeAssembliesForScan" value=""/>
    <add key="MvcSiteMapProvider_AttributesToIgnore" value=""/>
    <add key="MvcSiteMapProvider_CacheDuration" value="5"/>
    <add key="MvcSiteMapProvider_ControllerTypeResolverAreaNamespacesToIgnore" value=""/>
    <add key="MvcSiteMapProvider_DefaultSiteMapNodeVisibiltyProvider" value=""/>
    <add key="MvcSiteMapProvider_VisibilityAffectsDescendants" value="true"/>
    <add key="MvcSiteMapProvider_SecurityTrimmingEnabled" value="false"/>
    <add key="MvcSiteMapProvider_EnableLocalization" value="true"/>
    <add key="MvcSiteMapProvider_EnableSitemapsXml" value="true"/>
    <add key="MvcSiteMapProvider_EnableResolvedUrlCaching" value="true"/>
    <add key="MvcSiteMapProvider_EnableSiteMapFile" value="true"/>
    <add key="MvcSiteMapProvider_IncludeRootNodeFromSiteMapFile" value="true"/>
    <add key="MvcSiteMapProvider_EnableSiteMapFileNestedDynamicNodeRecursion" value="false"/>
    <add key="MvcSiteMapProvider_UseTitleIfDescriptionNotProvided" value="true"/>
</appSettings>
站点地图MVC.sitemap是否不更新? 我把下面的一行改为true

 <add key="MvcSiteMapProvider_ScanAssembliesForSiteMapNodes" value="true"/>

非常感谢您的建议。

目前没有自动生成网站地图的内置方法。必须使用一个可用的节点定义选项(、、或IsItemaNodeProvider)手动配置每个节点

这样做的主要原因是MVC没有预定义的页面层次结构,只有控制器和操作,因此最终会得到一个SiteMap对象,它有一个根节点,所有页面都在它的正下方。也不可能自动检测动作参数的所有可能值。在大多数情况下,像这样的扫描站点地图对于站点导航是无用的

也就是说,如果您只想创建一个XML站点地图以提交给搜索引擎(无论如何这是平面的),或者您可以想出一种方法来告诉MvcSiteMapProvider如何嵌套用于导航的键/父键关系,那么您可以实现IsItemApodeProvider并自己扫描控制器和操作(您可以使用作为指南)

现有配置的一些指针:

使用
[mvcsitemanode]
属性时,需要将
MvcSiteMapProvider\u scansassembliesforItemsNodes
设置设置为true,以便正确使用零件

但是,
mvcsitemprovider\u includeassemblesforscan
mvcsitemprovider\u UseExternalDIContainer
设置定义了两次

该错误表示站点地图中没有节点具有名为“Home”的密钥,因此它不知道将您配置的
[mvcsitemasnode]
放置在层次结构中的何处

由于您已将
mvcsitemprovider\u EnableSiteMapFile
mvcsitemprovider\u IncludeRootNodeFromSiteMapFile
都设置为true,因此必须在Mvc.sitemap文件中定义根节点,并给它一个显式键“Home”(如果这是您想要的)


非常感谢您的详细回答,非常有帮助。当我手动编辑MVC.sitemap时,它是有效的,但是canonicalUrl只适用于前两行。有什么地方我需要更改行数吗。我正以你为榜样。顺便说一句,非常好的工具,谢谢。我不明白你说的“canonicalUrl只适用于前两行”是什么意思。请注意,使用canonicalKey通常是一种更好的方法,因为如果canonical(authoritive)节点的配置发生更改,它将动态同步该节点的URL。canonicalUrl只有在URL完全是从canonical节点生成的URL时才起作用;我已在另一个问题中发布了我的代码:。我想,我不明白xml文件是如何构造的。
 <add key="MvcSiteMapProvider_ScanAssembliesForSiteMapNodes" value="true"/>
Not all configured nodes could be paired with a parent node. Check your parent keys to ensure that a node with a corresponding key exists in the SiteMap. Note that the match is case sensitive.
SiteMapCacheKey: 'sitemap://localhost/'
Orphaned Nodes:
ParentKey: 'Home' | Controller: 'Home' | Action: 'Healthcare' | Area: '' | URL: '/Home/Healthcare' | Key: 'Healthcare' | Source: 'MvcSiteMapNodeAttribute' 
<mvcSiteMapNode title="Home" controller="Home" action="Index" key="Home">
    <!-- If you have any additional nodes you want to define in XML, put them here -->
</mvcSiteMapNode>
[MvcSiteMapNode(Title = "Home", Key = "Home")]
public ActionResult Index()
{
    return View();
}