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

时间:2014-10-02 18:40:25

标签: asp.net virtualpathprovider

我编写了一个自定义的ASP.NET站点地图提供程序,它运行良好但是如果我将查询参数添加到虚拟路径SiteMap.CurrentNode返回null - 它找不到该页面。我在我的所有代码中都放置了断点,从来没有一次使用查询参数进入我的虚拟路径提供程序。我在这里缺少什么?

1 个答案:

答案 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);
        }
    }
    ...