Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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-使用自定义URL访问站点地图_C#_Xml_Asp.net Mvc 4_Mvcsitemapprovider - Fatal编程技术网

C# MvcSiteMapProvider-使用自定义URL访问站点地图

C# MvcSiteMapProvider-使用自定义URL访问站点地图,c#,xml,asp.net-mvc-4,mvcsitemapprovider,C#,Xml,Asp.net Mvc 4,Mvcsitemapprovider,我想在开始之前说,我是.NET和C#的新手,所以这可能是一个相对简单的问题,但到目前为止,我还无法独自解决它。我在自己的时间里学习.NETMVC,但由于各种情况,我不得不在工作中学习它,因此我对它的知识和理解目前是支离破碎的,尽管到目前为止我只是通过查找来管理 我也不能给出具体的名字或网址,因为它涉及到一个客户谁与保密协议是有效的,所以我必须保持它的通用性 情况: 我有一个应用程序(一个定制的CMS,如果你愿意的话),它是内部构建的,用于客户项目。此应用程序利用来生成面包屑(如果需要),并提供一

我想在开始之前说,我是.NET和C#的新手,所以这可能是一个相对简单的问题,但到目前为止,我还无法独自解决它。我在自己的时间里学习.NETMVC,但由于各种情况,我不得不在工作中学习它,因此我对它的知识和理解目前是支离破碎的,尽管到目前为止我只是通过查找来管理

我也不能给出具体的名字或网址,因为它涉及到一个客户谁与保密协议是有效的,所以我必须保持它的通用性

情况: 我有一个应用程序(一个定制的CMS,如果你愿意的话),它是内部构建的,用于客户项目。此应用程序利用来生成面包屑(如果需要),并提供一个供机器人爬网的XML站点地图。 其中一个实例还通过Akamai进行路由,以使子域看起来像子文件夹,但由于各种重定向和反向代理规则,XML Sitemap在其默认URL处不再可访问。我被交给解决这个问题,一直在努力寻找解决办法

我想做的是更改站点地图的URL,以便在机器人程序看来,它与应用程序的其余部分位于同一虚拟子目录中。 例子: www.application.com/sitemap.xml将类似于www.application.com/blog/sitemap.xml

我所尝试的: 1-我曾尝试专门为网站地图定义自定义路线,但无论是由于我自己缺乏知识还是其他因素,这一尝试也证明不起作用。以下代码是我为此所尝试的:

RouteConfig.cs

routes.MapRoute(
      "CustomSitemap",
      "blog/sitemap.xml",
      new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Mvc.Sitemap

<mvcSiteMapNode title="Home" controller="Home" action="Index" route="CustomSitemap">
    <!-- Providers go here ->
</mvcSiteMapNode>
2-我还尝试将Mvc.Sitemap文件移动到另一个目录,看看是否有效,但它的URL也没有改变

3-我查阅了MvcSiteMapProvider文档,但没有直接回答我的问题。但由于缺乏理解,我可能忽略了其中的一些东西


感谢您查看,我为问题的模糊性道歉。

首先,您应该禁用由
mvcsitemprovider添加的路由

内部DI 自定义XML站点地图路由 然后,只需注册
XmlSiteMapController
的路由即可。为了考虑分页,您需要有2个页面(当您达到35000个页面时,它会自动使用一个和多个站点地图页面)

注意:此示例演示如何向路由添加子目录。但是请注意,如果您决定实现此协议,那么您应该了解该协议的局限性

站点地图文件的位置决定了可以包含在该站点地图中的URL集。位于的站点地图文件可以包含以开头的任何URL,但不能包含以开头的URL。


首先,您应该禁用由
mvcsitemprovider
添加的路由

内部DI 自定义XML站点地图路由 然后,只需注册
XmlSiteMapController
的路由即可。为了考虑分页,您需要有2个页面(当您达到35000个页面时,它会自动使用一个和多个站点地图页面)

注意:此示例演示如何向路由添加子目录。但是请注意,如果您决定实现此协议,那么您应该了解该协议的局限性

站点地图文件的位置决定了可以包含在该站点地图中的URL集。位于的站点地图文件可以包含以开头的任何URL,但不能包含以开头的URL。


谢谢你这么快的回复。我会试试看能不能让它工作。此方法是否需要使用依赖项注入?不,依赖项注入不需要这样做(但如果您愿意,可以使用它)。感谢您如此快速地响应。我会试试看能不能让它工作。此方法是否需要使用依赖项注入?不,不需要依赖项注入来执行此操作(但如果您愿意,可以使用它)。
routes.MapRoute(
      name: "Default",
      url: "{controller}/{action}/{id}",
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
<configuration>
  <appSettings>
    <add key="MvcSiteMapProvider_EnableSitemapsXml" value="false"/>
  </appSettings>
</configuration>
// Register the Sitemaps routes for search engines
//XmlSiteMapController.RegisterRoutes(RouteTable.Routes);
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "XmlSitemap",
            url: "blog/sitemap.xml",
            defaults: new { controller = "XmlSiteMap", action = "Index", page = 0 }
        );

        routes.MapRoute(
            name: "XmlSitemap-Paged",
            url: "blog/sitemap-{page}.xml",
            defaults: new { controller = "XmlSiteMap", action = "Index", page = 0 }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}