📅  最后修改于: 2023-12-03 14:57:38.431000             🧑  作者: Mango
在使用 ASP.NET Forms 身份验证时,我们通常会使用 FormsAuthentication.RedirectFromLoginPage 方法将用户成功登录后重定向到之前访问的页面。但是,默认情况下,它会重定向到站点的默认页,这可能不是我们想要的行为。所以,我们需要在登录页上设置它将重定向到的页面。
下面是一些介绍如何设置 FormsAuthentication.RedirectFromLoginPage 重定向到的页面的方法:
我们可以在 Web.config 文件中设置 defaultUrl,这是重定向到的默认页面。可以在 <authentication>
元素下添加以下代码:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" defaultUrl="~/Home/Index" timeout="2880" />
</authentication>
这将在用户成功登录后将其重定向到 Home 控制器的 Index 动作。
当我们将用户重定向到登录页时,我们可以通过 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;
}
}
}
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 重定向到的页面的几种不同方法。根据您的实际需求选择适合您的方法即可。