处理异常并重定向到另一个页面的登录页面

本文关键字:登录 另一个 异常 重定向 处理 | 更新日期: 2023-09-27 18:15:56

我有一个登录页面和a.c.s.页面。

登录页面设计

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="IssueTrak.UserInterface.Login" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtUserName" placeholder="User Name" runat="server"></asp:TextBox>
        <br />
        <asp:TextBox ID="txtPassword" placeholder="Password" TextMode="Password" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="btnLogin" runat="server" OnClick="btnLogin_Click" Text="Login" />
    </div>
    </form>
</body>
</html>

.CS页面设计

protected void LoginButton_Click(object sender, EventArgs e)
        {
            try
            {
                BusinessLogic objBussinessLogic = new BusinessLogic();
                string userName = objBussinessLogic.Authenticate(login,password);
                if (!string.IsNullOrEmpty(userName))
                {
                    Session["username"] = userName;
                    Response.Redirect("Home.aspx",true);
                }
                else
                {
                    ClientScript.RegisterClientScriptBlock(GetType(), "alert", "alert('Invalid Login.')", true);
                }
            }
            catch (Exception ex)
            {
                HttpContext.Current.Response.Redirect("Issue.aspx", false);
            }
        }
    }
}

问题是当我输入数据库中可用的用户名和密码时,它应该返回到Home。相反,它是直接抓住我在哪里犯了错误。我在3层架构中设计了我的代码,我只提供了很少的信息,我没有提供我的DB连接部分。我只是想重定向到Home。当我输入正确的凭据

处理异常并重定向到另一个页面的登录页面

Response.Redirect("something", true)抛出ThreadAbortException

当您在页处理程序中使用此方法来终止对并开始对另一个页面的新请求,将endResponse设置为false,然后调用completerrequest方法。如果你指定为true对于endResponse参数,该方法调用的End方法原始请求,会抛出ThreadAbortException异常当它完成时。这个异常对Web有不利的影响应用程序性能,这就是为什么为

建议使用endResponse参数。

你在catch块中捕获它,然后重定向到Issue.aspx。

您可以为ThreadAbortException添加一个特定的异常处理程序

catch (Exception ex)
{
    HttpContext.Current.Response.Redirect("Issue.aspx", false);
}
catch (ThreadAbortException ex)
{
}

或者呼叫Redirect,第二个参数(endResponse)设为false

Response.Redirect("Home.aspx", false);

根据你的代码和描述…程序工作正常。你说:when i enter the User name and password that is available in the DB, it should return to Home.aspx,那真的是要重定向到Home。因为你输入了一个有效的usernamepassword,假设你输入了一个错误的usernamepassword,你将不会被重定向到Issue.aspx,因为它只是无效的。

您只会重定向到Issue。aspx 如果系统遇到一个系统异常,因为你把你的代码在catch块:

catch (Exception ex)
{
     HttpContext.Current.Response.Redirect("Issue.aspx", false);
}