我已经编写了一个自定义的ASP.NET站点地图提供程序,它运行良好,但如果我将查询参数添加到虚拟路径SiteMap.CurrentNode
返回null
,它就找不到页面。我在所有代码中都设置了断点,从来没有一次它通过查询参数进入我的虚拟路径提供程序。我在这里错过了什么?
我找到了问题的答案,并将其发布在这里以供以后使用。在查找匹配路径时,站点地图提供程序似乎总是使用不带querystring参数的路径。诀窍是不要在覆盖SiteMapProvider.CurrentNode()
函数中使用Reqest.RawUrl
,而是使用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);
}
}
...