我正在尝试使用SiteMapPath控件在visual studio ASP C#网站上实现面包屑功能。
我工作的公司继承了该网站,我们主要是PHP开发人员,因此请原谅无知。
最初当我从工具箱中删除SiteMapPath时,我收到一条错误消息,指出没有找到web.sitemap文件。然后我使用一个应该为ASP站点完成工作的应用程序创建了一个。
我们现在收到的错误消息告诉我们,您不允许在xml结构中两次使用相同的URL。这似乎很荒谬,因为许多页面都有相同的链接。
有些研究告诉我在xml中附加每个URL都有一个唯一的虚拟无用请求字符串。这似乎有点荒谬,并且完全破解 - 尤其是一个包含可能数百个网址重复的网站。
任何人都可以对此有所了解,或者甚至是一种完全不同的方法吗?
非常感谢!
答案 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>