使用查询参数时,SiteMap.CurrentNode返回null



我已经编写了一个自定义的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);
        }
    }
    ...

相关内容

  • 没有找到相关文章

最新更新