我编写了一个自定义的ASP.NET站点地图提供程序,它运行良好但是如果我将查询参数添加到虚拟路径SiteMap.CurrentNode
返回null
- 它找不到该页面。我在我的所有代码中都放置了断点,从来没有一次使用查询参数进入我的虚拟路径提供程序。我在这里缺少什么?
答案 0 :(得分:2)
我找到了一个问题的答案并将其发布在此处供以后使用。在查找匹配路径时,似乎站点地图提供程序始终使用不带查询字符串参数的路径。诀窍是不要在覆盖Reqest.RawUrl
函数中使用SiteMapProvider.CurrentNode()
,而是使用Request.Path
;我在下面发布了我的解决方案:
public class CustomSiteMapProvider : SiteMapProvider {
// Implement the CurrentNode property.
public override SiteMapNode CurrentNode {
get {
var currentUrl = FindCurrentUrl();
// Find the SiteMapNode that represents the current page.
var currentNode = FindSiteMapNode(currentUrl);
return currentNode;
}
}
// Get the URL of the currently displayed page.
string FindCurrentUrl() {
try {
// The current HttpContext.
var currentContext = HttpContext.Current;
if (currentContext != null) return currentContext.Request.Path;
throw new Exception("HttpContext.Current is Invalid");
} catch (Exception e) {
throw new NotSupportedException("This provider requires a valid context.", e);
}
}
...