我正在尝试为我的网站动态创建一个站点地图,我想它(我相信它有必要)位于根级别,即。 Domain.com/sitemap.xml 到目前为止,我在家庭控制器中有一个动作结果,如下所示:
public ActionResult SiteMap()
{
...
return this.Content(xml, "text/xml");
}
这适用于创建文件,但它位于Domain.com/Home/Sitemap,我的理解是站点地图应该位于根级别。有没有办法在Global.asax文件中重写网址或为其添加新路由?默认情况下,Global.asax文件包含:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
因此,如果请求的路由是Sitemap.xml并且只是将其重定向到Home / sitemap(或者只是在那里提供站点地图),这似乎可以添加类似检查的地方。如果可能的话,我不知道如何做到这一点,因为我从来没有弄乱过RegisterRoutes部分。
可能出现的另一个问题是扩展名.xml,我认为IIS会认为这是驱动器上的文件而忽略了所有路径。
我是走正确的道路,还是有更好的方法来做到这一点?或者这是不可能的,我只需要物理创建文件?
修改(已解决) 我刚想到我一直在想这个错误的方式。我所要做的就是有一个方法来创建/更新站点地图文件并将其保存到/sitemap.xml周期或每次添加页面时。我无法相信这对我来说并不明显。
答案 0 :(得分:2)
您可以添加路线:
routes.MapRoute(
"sitemap",
"sitemap.xml",
new { controller = "Home", action = "SiteMap" }
);
并确保将此路线放在默认路线之前。
答案 1 :(得分:1)
这可能稍微偏离主题,(但同样的,有点亲近......我想)看看MVCSitemapProvider。
在项目中使用它很简单,我最近开始使用它,它就像一个魅力。如果你最终想要走这条路,我可以添加一些代码示例吗?