如何以编程方式获取“登录后重定向”URL?

时间:2013-12-06 18:12:34

标签: dotnetnuke

我一直在编写一个模块,用于替换DNN中的注册表单,以便更好地使用我们的系统。我一直在试图弄清楚如何以编程方式获取“登录后重定向”字段的“管理设置”页面上指定的URL。在PortalSettings对象下,我已经能够找到许多不同的TabID属性,但它们似乎都不适用于此字段。我相信我正在寻找的另一个班级,但我不知道在哪里。有没有人遇到这个领域或者更清楚地知道我在哪里?提前谢谢!

1 个答案:

答案 0 :(得分:1)

再一次,我在发布后很快就找到了答案。

我在PortalSettings表中找到了“Redirect_AfterRegistration”,可以通过PortalController.GetPortalSettingsDictionary(PortalId)方法访问它。仅此一项是不够的,因为此值可能为-1,因此会将您重定向回同一页面(通常是注册页面)。 \ DesktopModules \ Admin \ Security \ Register.ascx.cs中存在代码,它在注册后提供重定向功能。在7.1.x中,这段代码有一个错误,但经过一些修改我得出了这个:

    public string RedirectAfterRegisterUrl
    {
        get
        {
            const string key = "Redirect_AfterRegistration";
            const string returnUrlKey = "returnurl";
            var url = "";
            var settings = DotNetNuke.Entities.Portals.PortalController.GetPortalSettingsDictionary(PortalId);


            if (settings.ContainsKey(key))
            {
                var tabId = Convert.ToInt32(settings[key]);
                if (tabId > 0)
                {
                    url = DotNetNuke.Common.Globals.NavigateURL(tabId);
                }
                else
                {
                    if (Request.QueryString[returnUrlKey] != null)
                    {
                        url = HttpUtility.UrlDecode(Request.QueryString[returnUrlKey]);
                        if (url.Contains("//"))
                            url = "";

                        if (url.Contains("?returnurl")) 
                        { 
                            string baseURL = url.Substring(0, url.IndexOf("?returnurl", StringComparison.Ordinal)); 
                            string returnURL = url.Substring(url.IndexOf("?returnurl", StringComparison.Ordinal) + 11); 
                            url = string.Concat(baseURL, "?returnurl", HttpUtility.UrlEncode(returnURL)); 
                        }
                    }
                }
            }

            return url;
        }
    }

我的测试表明,这会将我重定向到指定的“注册后重定向”页面。我希望这些解决方案能够帮助其他人!