📜  设置 FormsAuthentication.RedirectFromLoginPage 重定向到的页面 - C# (1)

📅  最后修改于: 2023-12-03 14:57:38.431000             🧑  作者: Mango

设置 FormsAuthentication.RedirectFromLoginPage 重定向到的页面 - C#

在使用 ASP.NET Forms 身份验证时,我们通常会使用 FormsAuthentication.RedirectFromLoginPage 方法将用户成功登录后重定向到之前访问的页面。但是,默认情况下,它会重定向到站点的默认页,这可能不是我们想要的行为。所以,我们需要在登录页上设置它将重定向到的页面。

下面是一些介绍如何设置 FormsAuthentication.RedirectFromLoginPage 重定向到的页面的方法:

1. 在 Web.config 中设置 defaultUrl

我们可以在 Web.config 文件中设置 defaultUrl,这是重定向到的默认页面。可以在 <authentication> 元素下添加以下代码:

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" defaultUrl="~/Home/Index" timeout="2880" />
</authentication>

这将在用户成功登录后将其重定向到 Home 控制器的 Index 动作。

2. 在登录操作中指定返回 URL

当我们将用户重定向到登录页时,我们可以通过 URL 参数指定将用户重定向到的页面的 URL。如下所示:

// 在登录操作中指定返回 URL
protected void LogIn(object sender, EventArgs e) {
    if (IsValid) {
        // 验证用户
        if (Membership.ValidateUser(UserName.Text, Password.Text)) {
            // 获取指定的返回 URL
            string returnUrl = Request.QueryString["ReturnUrl"];
            if (!string.IsNullOrEmpty(returnUrl))
                // 重定向到指定 URL
                FormsAuthentication.RedirectFromLoginPage(UserName.Text, false);
            else
                // 重定向到默认 URL(Web.config 中指定的 URL)
                Response.Redirect("~/");
        } else {
            FailureText.Text = "Invalid username or password.";
            ErrorMessage.Visible = true;
        }
    }
}
3. 使用 ReturnUrl 控件

ASP.NET 提供了一个名为 ReturnUrl 的控件,可以帮助我们在登录页上指定将用户重定向到的页面的 URL。可以在登录页上添加以下 HTML 代码:

<asp:Login ID="Login1" runat="server" ViewStateMode="Enabled">
    <LayoutTemplate>
        <asp:TextBox ID="UserName" runat="server"></asp:TextBox>
        <asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox>
        <asp:Button ID="LoginButton" runat="server" Text="Log In" OnClick="LogIn" />
        <asp:CheckBox ID="RememberMe" runat="server" Text="Remember Me" />
        <asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal>
        <asp:HyperLink ID="RegisterLink" runat="server" NavigateUrl="~/Account/Register" EnableViewState="False">Register</asp:HyperLink>
    </LayoutTemplate>
    <LoginButtonStyle CssClass="btn btn-default" />
    <TextBoxStyle CssClass="form-control" />
    <LabelStyle CssClass="control-label" />
    <HyperLinkStyle CssClass="btn btn-link" />
    <InstructionTextStyle Font-Italic="True" />
    <ErrorMessageStyle Font-Bold="True" ForeColor="#cc3300" />
    <TitleTextStyle CssClass="form-signin-heading" />
    <LoggedInTemplate>
        Welcome <asp:LoginName ID="LoginName1" runat="server" />, you have successfully logged in. <asp:Button ID="LogoutButton" runat="server" Text="Log Out" OnClick="LogOut" />
    </LoggedInTemplate>
</asp:Login>
<asp:HyperLink ID="ForgetPasswordHyperLink" runat="server" NavigateUrl="~/Account/ForgotPassword" Text="Forgot Password?" CssClass="need-help"></asp:HyperLink>
<p class="clearfix">
    <asp:CheckBox ID="CheckBox1" runat="server" />
    <span class="pull-left">Remember me</span>
</p>
<asp:HiddenField ID="ReturnUrl" runat="server" />

接下来,在登录操作中设置 ReturnUrl 的值:

// 在登录操作中指定返回 URL
protected void LogIn(object sender, EventArgs e) {
    if (IsValid) {
        // 验证用户
        if (Membership.ValidateUser(UserName.Text, Password.Text)) {
            // 获取指定的返回 URL
            string returnUrl = Request.QueryString["ReturnUrl"];
            if (!string.IsNullOrEmpty(returnUrl))
                FormsAuthentication.RedirectFromLoginPage(UserName.Text, false);
            else {
                // 设置 ReturnUrl 的值
                ReturnUrl.Value = Request.QueryString["ReturnUrl"];
                // 重定向到默认 URL(Web.config 中指定的 URL)
                Response.Redirect("~/");
            }
        } else {
            FailureText.Text = "Invalid username or password.";
            ErrorMessage.Visible = true;
        }
    }
}

最后,使用以下代码在 Page_Load 事件中设置默认值:

// 设置默认重定向 URL
protected void Page_Load(object sender, EventArgs e) {
    if (!IsPostBack) {
        // 获取默认重定向 URL
        string returnUrl = Request.QueryString["ReturnUrl"];
        if (!string.IsNullOrEmpty(returnUrl))
            // 设置 defaultUrl 的值
            Login1.DestinationPageUrl = returnUrl;
    }
}

以上就是如何设置 FormsAuthentication.RedirectFromLoginPage 重定向到的页面的几种不同方法。根据您的实际需求选择适合您的方法即可。