c# - 如何在 DotNetNuke 中获取门户的当前登录 URL?

标签 c# asp.net vb.net dotnetnuke

在 DNN 模块的上下文中,找出登录功能的 URL 的通用方法是什么?

最佳答案

这是一个获取登录 URL 的实用方法:

C#

        /// <summary>
        /// Gets the login URL for the given portal from the current <paramref name="request"/>.
        /// </summary>
        /// <param name="portalSettings">The portal settings.</param>
        /// <param name="request">The request.</param>
        /// <returns>The URL for the login page</returns>
        /// <exception cref="ArgumentNullException">if <paramref name="portalSettings"/> or <paramref name="request"/> is null.</exception>
        public static string GetLoginUrl(PortalSettings portalSettings, HttpRequest request)
        {
            if (portalSettings != null && request != null)
            {
                int tabId = portalSettings.ActiveTab.TabID;
                string controlKey = "Login";
                string returnUrl = request.RawUrl;
                if (returnUrl.IndexOf("?returnurl=", StringComparison.OrdinalIgnoreCase) > -1)
                {
                    returnUrl = returnUrl.Substring(0, returnUrl.IndexOf("?returnurl=", StringComparison.OrdinalIgnoreCase));
                }

                returnUrl = HttpUtility.UrlEncode(returnUrl);

                if (!Null.IsNull(portalSettings.LoginTabId) && string.IsNullOrEmpty(request.QueryString["override"]))
                {
                    // user defined tab
                    controlKey = string.Empty;
                    tabId = portalSettings.LoginTabId;
                }
                else if (!Null.IsNull(portalSettings.HomeTabId))
                {
                    // portal tab
                    tabId = portalSettings.HomeTabId;
                }

                // else current tab
                return Globals.NavigateURL(tabId, controlKey, new string[] { "returnUrl=" + returnUrl });
            }

            throw new ArgumentNullException(portalSettings == null ? "portalSettings" : "request");
        }

VB.NET

''' <summary>
''' Gets the login URL for the given portal from the current <paramref name="request"/>.
''' </summary>
''' <param name="portalSettings">The portal settings.</param>
''' <param name="request">The request.</param>
''' <returns>The URL for the login page</returns>
''' <exception cref="ArgumentNullException">if <paramref name="portalSettings"/> or <paramref name="request"/> is null.</exception>
Public Shared Function GetLoginUrl(portalSettings As PortalSettings, request As HttpRequest) As String
    If portalSettings <> Nothing AndAlso request <> Nothing Then
        Dim tabId As Integer = portalSettings.ActiveTab.TabID
        Dim controlKey As String = "Login"
        Dim returnUrl As String = request.RawUrl
        If returnUrl.IndexOf("?returnurl=", StringComparison.OrdinalIgnoreCase) > -1 Then
            returnUrl = returnUrl.Substring(0, returnUrl.IndexOf("?returnurl=", StringComparison.OrdinalIgnoreCase))
        End If

        returnUrl = HttpUtility.UrlEncode(returnUrl)

        If Not Null.IsNull(portalSettings.LoginTabId) AndAlso String.IsNullOrEmpty(request.QueryString("override")) Then
            ' user defined tab
            controlKey = String.Empty
            tabId = portalSettings.LoginTabId
        ElseIf Not Null.IsNull(portalSettings.HomeTabId) Then
            ' portal tab
            tabId = portalSettings.HomeTabId
        End If

        ' else current tab
        Return Globals.NavigateURL(tabId, controlKey, New String() {"returnUrl=" + returnUrl})
    End If

    Throw New ArgumentNullException(If(portalSettings = Nothing, "portalSettings", "request"))
End Function

关于c# - 如何在 DotNetNuke 中获取门户的当前登录 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1246570/

相关文章:

c# - iTextSharp pdfpTable 在同一页面的两列中流动

c# - 如何使用 Windsor 容器注册一个类的单独实例

c# - 在 ASP.Net 中,了解和分析性能的最佳方法是什么?

c# - ASP.NET Web 应用程序中的身份验证遇到问题

asp.net - 加密 API 调用如何工作

vb.net - 调整动态创建的标签的大小以适合其中的文本?

vb.net - 使用动态 where 子句进行查询(连接数组元素)

c# - 通过 LINQ 映射进行调用时增加 SQL 命令超时

c# - 从通用列表中获取对称差异

javascript - 如何清除并重新填充下拉选项