2

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

4

1 回答 1

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);
        }
    }
    ...
于 2014-10-02T19:30:30.933 回答