假设我在母版页加载事件中。如果用户已登录,我需要将它们重定向到 Login.aspx,如果未登录,我需要将它们重定向到 Login.aspx。但首先,我需要知道他们试图访问哪个页面。
我怎样才能得到这些信息?
谢谢
因此,您可以为所有页面创建一个基类,并在该类中覆盖 OnInit (EventArgs e) 方法。在此方法中,将检查用户是否在系统上签名的代码(通过检查表示用户的会话变量不为空),如果该变量为空,则执行重定向到登录页面。如果您采用这种方法,您的所有内容页面(登录页面除外)都必须继承自该基类。
我希望这可以帮助你。
public class BasePage : Page
{
/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e)
{
if (Session["Usuario"] == null)
{
Response.Redirect(ResolveClientUrl("~/Login.aspx"));
}
}
}
这有点令人困惑。您希望相同的母版页从内容页(例如 default.aspx)重定向到登录页(例如 Login.aspx)并从登录页重定向到内容页。你只需要做这些事情之一。
首先,您将需要 2 个母版页(或仅从 Login.aspx 中删除母版页),因为您将陷入递归循环。
假设用户试图访问您的站点,但他们没有登录。他们将被重定向到 Login.aspx,它会检查并查看他们没有登录,将他们重定向到 Login.aspx,等等。 ..
如果他们已经登录,则不需要从 Login.aspx 重定向,因为他们不应该首先访问此页面,除非他们没有。
最后,在主页面中执行快速检查以查看用户是否已登录,如果未登录,则重定向到登录页面并将他们请求的页面作为 url 的参数传递(如前所述,创建 Session 变量有效也)。
If (!userLoggedIn)
{
Response.Redirect("Login.aspx?Url=" + Request.Url);
}
这会传入他们最初作为参数访问的 Url(例如 Login.aspx?Url=default.aspx)
然后在 Login.aspx
If (userSuccessfullyLoggedIn)
{
Response.Redirect(Request.Params["Url"]);
}
这会将他们重定向到他们最初请求的页面(例如 default.aspx)
您可以使用Request.RawUrl
获取当前请求的 URL。
if (Request.RawUrl.StartsWith("/login.aspx")){
//Check whether user is logged in
}