【发布时间】:2010-11-19 18:14:03
【问题描述】:
一些需要思考的场景。有一个遗留代码具有以下实现示例 1 和示例 2。如果我们尝试实现MSDN recommendation,那么遗留代码就会失败。
这是一个旧代码示例:
示例 1:
void Page_Load() {
....一些代码
如果(条件){
/// 一些条件
} 别的 {
重定向页面(网址);
}
// 另一个代码块
// 一些其他条件。
}
示例 2:
一个。文件1.ascx
无效页面加载(){
尝试 {
..一些代码
base.CheckPreference();
重定向页面(默认页面);
}
捕捉(异常前){
ExceptionHandling.GetErrorMessage(ex);
}
}
湾。 BaseClass.cs // 这是基类
无效检查偏好(){
尝试 {
如果(条件){
重定向页面(url1);
}否则如果(条件2){
重定向页面(url2);
} 别的 {
// 更新会话
}
}
捕捉(异常前){
ExceptionHandling.GetErrorMessage(ex);
扔;
}
}
无效重定向页面(字符串网址){
响应。重定向(网址);
}
一种可能的方法是在类中添加一个布尔字段,例如 endExecution,在调用 RedirectPage 时将该字段设置为 true。
我们必须更新 RedirectPage 代码见下面的代码 sn-p:
// 更新代码 - MSDN 推荐。 无效重定向页面(网址){ Response.Redirect(url, false); this.Context.ApplicationInstance.CompleteRequest(); 结束执行=真; }请提出一些其他更好的方法来改进遗留代码的实现。
【问题讨论】:
-
您遇到了什么问题?通过将
false传递给redirect 方法,然后调用CompleteRequest(),这应该会结束请求。 -
遗留代码中发生了什么?错误是什么
-
在旧代码中,由于 RedirectPage 引发 ThreadAbortException,因此不会调用 RedirectPage 之后的代码块。但是,如果我实现 MSDN 的建议,那么 RedirectPage 之后的代码将被执行,我不想执行它。由于这是遗留代码,在许多地方,在 RedirectPage 之后有很多代码,例如进行服务调用、更新会话等...所以我正在寻找替代方法。