为ASP.NET网站创建web.sitemap文件

时间:2011-11-28 16:44:52

标签: c# asp.net visual-studio-2010 web.sitemap

我正在尝试使用SiteMapPath控件在visual studio ASP C#网站上实现面包屑功能。

我工作的公司继承了该网站,我们主要是PHP开发人员,因此请原谅无知。

最初当我从工具箱中删除SiteMapPath时,我收到一条错误消息,指出没有找到web.sitemap文件。然后我使用一个应该为ASP站点完成工作的应用程序创建了一个。

我们现在收到的错误消息告诉我们,您不允许在xml结构中两次使用相同的URL。这似乎很荒谬,因为许多页面都有相同的链接。

有些研究告诉我在xml中附加每个URL都有一个唯一的虚拟无用请求字符串。这似乎有点荒谬,并且完全破解 - 尤其是一个包含可能数百个网址重复的网站。

任何人都可以对此有所了解,或者甚至是一种完全不同的方法吗?

非常感谢!

2 个答案:

答案 0 :(得分:3)

基本上,默认站点地图提供程序(System.Web.XmlSiteMapProvider)要求所有URL都是唯一的,因此它可以使用属性SiteMap.CurrentNode轻松解析当前选定的节点。

这有点令人沮丧,这导致人们在你所注意到的虚假查询字符串上进行攻击。对于只有少量重复的简单情况,这通常是可以接受的。

但是,您可以实施自己的站点地图提供程序,请参阅MSDN上的Implementing ASP.NET Site-Map Providers。通过这样做,您可以拥有自己的逻辑来处理站点地图文件,并获得所需的行为。

在这种情况下,自定义站点地图提供程序可能是最干净的方法。

答案 1 :(得分:0)

  

"我们现在得到的错误消息告诉我们,您不允许在xml结构中两次使用相同的URL。这看起来很荒谬,因为很多页面会有相同的链接。"

我认为有点混乱:具有相同链接的页面无关紧要 - web.sitemap只是页面位置的XML地图。该文件不记录页面交叉链接。但是,如果它们具有相同的名称,您可以将其嵌套:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="/" title="Home">
        <siteMapNode url="/subdir" title="Subdir">
            <siteMapNode url="/subdir/page.aspx" title="Nested Page" />
        </sitemapNode>
        <siteMapNode url="/page.aspx" title="Root Page" />
    </siteMapNode>
</siteMap>