首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么在运行Response.Redirect()时会抛出异常?

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

Stack Overflow用户
提问于 2009-09-01 21:02:50
回答 9查看 7.3K关注 0票数 6

我正在学习ASP.NET,并且正在研究QueryStrings。

我看到的一个例子是将一个按钮挂接到一个重定向调用:

代码语言:javascript
运行
复制
    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);
        }
    }

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

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-09-01 21:06:25

这是设计好的。此KB article描述行为(也适用于Request.End()Server.Transfer()方法)。

对于Response.Redirect(),存在重载:

代码语言:javascript
运行
复制
Response.Redirect(String url, bool endResponse)

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

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

票数 15
EN

Stack Overflow用户

发布于 2009-09-01 21:04:03

这很正常。Server.Transfer()也会抛出同样的异常。

这是因为在内部,这两个方法都调用Response.End(),它会立即中止当前的请求处理。Rick Strahl有一个pretty good blog post,它分析了为什么您几乎无法避免这些异常。

票数 3
EN

Stack Overflow用户

发布于 2009-09-01 21:08:58

Response.Redirect在内部调用Response.End,因此它会抛出异常,请改用:

代码语言:javascript
运行
复制
Response.Redirect(url, false);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1364645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档