为什么运行Response.Redirect()时会出现抛出异常?

Med*_*Man 6 .net c# asp.net

我正在学习ASP.NET,正在查看QueryStrings.

我正在看的其中一个示例将按钮挂钩到重定向调用:

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        try
        {
            //throws ThreadAbortException: "Thread was being aborted"
            Response.Redirect("Form2.aspx");
        }
        catch (Exception Ex)
        {
            System.Diagnostics.Debug.WriteLine(Ex.Message);
        }
    }
Run Code Online (Sandbox Code Playgroud)

为什么会在这里抛出ThreadAbortException?这是正常的吗?我应该为此做点什么吗?例外通常不是一件好事,所以当我看到这一点时我感到震惊.

M4N*_*M4N 14

这是设计的.此知识库文章描述了行为(也适用于Request.End()Server.Transfer()方法).

因为Response.Redirect()存在过载:

Response.Redirect(String url, bool endResponse)
Run Code Online (Sandbox Code Playgroud)

如果传递endResponse = false,则不会抛出异常(但运行时将继续处理当前请求).

如果endResponse = true(或者如果使用不带bool参数的重载),则抛出异常并立即终止当前请求.

  • 我怀疑它实际上是"按设计",也许是他们设计的不幸结果?;) (2认同)
  • "按设计"并不意味着所选择的设计是完美的;-) (2认同)