【问题标题】:FullUrl in HttpModuleHttpModule 中的 FullUrl
【发布时间】:2014-08-20 16:27:52
【问题描述】:

我正在为 DNN 6/7 创建一个自定义 HttpModule,以便在我们的网站上进行一些用户跟踪。我已经设置了 HttpModule 来记录引荐网址和当前页面网址。我还希望 HttpModule 网站平台不特定,以便它可以与 DNN 站点和非 DNN 站点一起使用。

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

引荐 URL 按我的意图显示 (http://site/folder/page.aspx),但当前页面显示为 DNN 选项卡 (http://site/folder/default.aspx?TabID=123 )。

我的自定义模块中有没有办法访问“DotNetNuke.Entities.Tabs.TabController.CurrentPage.FullUrl”?

此外,我想,如果 FullUrl 可用(当/如果 HttpModule 与 DNN 站点和/或页面一起使用时)以及简单地正常访问 URL(当/如果 HttpModule 不与神经网络)?

我认为显然这只是一个 If/Null/Else,但在这种情况下是否有更优雅的方法来处理它?

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

谢谢!

【问题讨论】:

  • 我之前在一个模块中使用TabController访问当前页面,你试过吗?

标签: url-rewriting dotnetnuke httpmodule


【解决方案1】:

在您的模块加载后,URL 会变为友好。您应该能够执行类似的操作来获取 DNN 页面 URL。

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

【讨论】:

  • 谢谢@austin。我认为这接近我必须做的。效果很好。
【解决方案2】:

根据 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;
    }

【讨论】:

    猜你喜欢
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 2011-04-18
    • 2011-06-05
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多