2012-02-14 73 views
0

我一直负责为客户端创建面包屑功能。他们目前的网站设置为基于XML /文件。每个.aspx页面都是N层深,并且有一个控件连接到相应的.xml文件。IIS7重写模块和ASP.net Request.PhysicalPath

我决定通过pages目录结构实现面包屑。我抓取物理路径,剥离根目录,分割目录,并使用这些部分作为我的面包屑。他们的所有文件夹都在CamelCase中命名,所以我使用骆驼套来打破这个词来显示。

如:网站可能看起来像

首页

- 子目录1

------子目录1.1

----------我的页面的.aspx

- 子目录2

------ MySecondPage.aspx

如果您对“MyPage.aspx” ..你得到的面包屑是:

首页 - >子方向1 - >子迪尔1.1 - >我的网页

这里是我有问题。客户端也使用IIS7重写模块强制使用小写URL。问题在于,我在Request.PhysicalPath调用中返回的值全部是小写,所以我的显示文本不起作用(因为它依赖于CamelCase)。如果我关闭IIS7执行,它将如上所示显示。如果没有,我会得到:

首页 - >子目录1 - >子目录1.1 - >我的空间

反正是有强制通过IIS7重写模块小写的网址,而不会影响Request.PhysicalPath (或Request.PhysicalApplicationPath)调用?

谢谢

回答

0

我觉得在这种情况下你不能依赖Request.PhysicalPath。

尝试使用approach from this question获取实际文件名的正确外壳

+0

完美。到底我在找什么,你最好。作为一个后续问题,因为这个实现将被用于构建面包屑并因此以页为单位进行调用,所以您认为每个循环访问I/O至少几次会产生什么样的影响,请遍历至少循环几次(对于n深度目录级别n次),每页加载? – MikeAtCodeSmart 2012-02-15 17:03:17

+0

是否值得添加缓存机制来缓存格式化的路径信息并使用该值而不是每次都去文件系统? – MikeAtCodeSmart 2012-02-15 17:04:20

+0

没有测试就很难预测性能。但是,在类似的情况下(当结果不会随时间变化时),我通常使用静态ConcurrentDictionary或HttpApplicationState来存储结果,这很容易实现,并保证没有还原剂I/O。 – Artem 2012-02-15 19:31:38