为了账号安全,请及时绑定邮箱和手机立即绑定

为什么响应.重定向导致System.Thread.ThreadAbortException?

为什么响应.重定向导致System.Thread.ThreadAbortException?

C#
红糖糍粑 2019-07-26 14:14:34
为什么响应.重定向导致System.Thread.ThreadAbortException?当我使用Response.重定向(.)要将表单重定向到新页面,我将得到以下错误:类型‘System.Threading.ThreadAbortException’的第一次机会异常发生在mcorlib.dll中。类型‘System.Threading.ThreadAbortException’的异常发生在m336 lib.dll中,但未在用户代码中处理。我对此的理解是,错误是由Web服务器中止调用response.redirected页面的其余部分引起的。我知道我可以在Response.Redirect这叫做endResponse。如果我将endResponse设置为True,我仍然会得到错误,但如果我将其设置为false,则不会。我很确定,尽管这意味着Web服务器正在运行我重定向的页面的其余部分。至少可以说这是没有效率的。有更好的方法吗?其他的东西Response.Redirect或者,是否有一种方法可以强制旧页停止加载我无法获得ThreadAbortException?
查看完整描述

3 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

正确的模式是使用endResponse=false调用重定向重载,并调用IIS管道,一旦返回控制,它应该直接进入EndRequest阶段:

Response.Redirect(url, false);Context.ApplicationInstance.CompleteRequest();

这篇博客文章ThomasMarquardt提供了其他详细信息,包括如何处理在Application_Error处理程序中重定向的特殊情况。


查看完整回答
反对 回复 2019-07-27
?
慕码人2483693

TA贡献1860条经验 获得超9个赞


我知道我迟到了,但我只犯过这样的错误Response.Redirect在一个Try...Catch封锁。

永远不要做出回应,转向尝试.捕捉块。这是不好的做法

编辑

在回应@Kiquenet的评论时,我会这样做,以替代将Response.Redirectinthetry.CATCH块。

我会把这个方法/函数分成两个步骤。

TRY.CATCH块中的第一步执行请求的操作,并设置一个“结果”值,以指示操作的成功或失败。

在try.CATCH块之外的第二步,根据“结果”值的不同,重定向(或不重定向)。

这段代码很不完美,可能不应该被复制,因为我还没有测试过它。

public void btnLogin_Click(UserLoginViewModel model){
    bool ValidLogin = false; // this is our "result value"
    try
    {
        using (Context Db = new Context)
        {
            User User = new User();

            if (String.IsNullOrEmpty(model.EmailAddress))
                ValidLogin = false; // no email address was entered
            else
                User = Db.FirstOrDefault(x => x.EmailAddress == model.EmailAddress);

            if (User != null && User.PasswordHash == Hashing.CreateHash(model.Password))
                ValidLogin = true; // login succeeded
        }
    }
    catch (Exception ex)
    {
        throw ex; // something went wrong so throw an error
    }

    if (ValidLogin)
    {
        GenerateCookie(User);
        Response.Redirect("~/Members/Default.aspx");
    }
    else
    {
        // do something to indicate that the login failed.
    }}




查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 271 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信