HttpModule中的FullUrl

时间:2014-08-20 16:27:52

标签: url-rewriting dotnetnuke httpmodule

我正在为DNN 6/7创建自定义HttpModule,以便在我们的网站上进行一些用户跟踪。我已经设置了HttpModule来记录推荐网址和当前网页网址。我也希望HttpModule网站平台具有特定性,因此它适用于DNN网站和非DNN网站。

t.Referrer = request.UrlReferrer != null ? request.UrlReferrer.ToString() : "(direct / unknown)";
t.Page = request.Url.ToString();

引用网址按照我的意图显示(http:// site / folder / page.aspx),但当前页面显示为DNN标签(http:// site / folder / default.aspx?TabID = 123 )。

我的自定义模块中是否有办法访问" DotNetNuke.Entities.Tabs.TabController.CurrentPage.FullUrl" ?

此外,我想如何优雅地访问FullUrl(如果HttpModule与DNN站点和/或页面一起使用),并且只是正常访问URL(当/如果是HttpModule)不与DNN一起使用)?

我认为很明显这只是一个If / Null / Else,但在这种情况下是否有一种更优雅的方式来处理它?<​​/ p>

C#示例最好,但我也理解VB语法。

谢谢!

2 个答案:

答案 0 :(得分:2)

加载模块后,URL会变为友好。你应该可以做这样的事情来获取DNN页面网址。

string currentURL = Globals.NavigateURL(PortalSettings.ActiveTab.TabID);

答案 1 :(得分:0)

按照Per Austin Wernli的建议,我最终做到了这一点:

protected string GetPageUrl(string TabIdUrl)
    {
        if (TabIdUrl.Contains("TabID"))
        {
            try
            {
                Uri uri = new Uri(TabIdUrl);
                string param = HttpUtility.ParseQueryString(uri.Query).Get("TabID");
                int tabid = Convert.ToInt32(param);
                return Globals.NavigateURL(tabid);
            }
            catch(Exception ex)
            {
                return TabIdUrl + "| ERROR: " + ex.ToString().Take(200);
            }
        }
        else
            return TabIdUrl;
    }