.net 页面跳转报正在中止线程错误

2019-07-12 14:07:20 +08:00
 zarte

判断用户是否登录,使用 HttpContext.Current.Response.Redirect 跳转到登录页面,会抛出异常。百度的结果是 Response.End 导致。
解决办法是使用 Response.Redirect ( url,bool )方法但是!!会继续执行之后的代码,还有说加 HttpContext.Current.ApplicationInstance.CompleteRequest 的也一样会执行之后的代码。
.net 就没有这种跳转需求吗?结束之后的代码不抛异常的?

3180 次点击
所在节点    .NET
5 条回复
Rwing
2019-07-12 14:35:14 +08:00
return?
arrow8899
2019-07-12 14:57:37 +08:00
重定向是客户端做的事啊,Response.Redirect 只是给客户端返了个 302,服务端的逻辑可以继续执行,你不想继续执行就 return。
zarte
2019-07-12 15:11:05 +08:00
@arrow8899 问题是封装了个跳转的方法,return 后主方法之后的还是会执行。
zarte
2019-07-12 15:12:20 +08:00
@Rwing Page_Load 里调用别的方法,别的方法使用了跳转,return 就没用了。
yulitian888
2019-07-12 15:23:10 +08:00
因为没有结束请求的响应过程,加上 CompleteRequest 就好了
我写的一个扩展方法,直接引用了就可以用 response 实例.RedirectTo("地址")来跳了

public static class HttpRedirect
{
public static void RedirectTo(this HttpResponse response, string url)
{
if (response.IsRequestBeingRedirected)
{
return;
}

response.Redirect(url, false);
var context = HttpContext.Current;
if (context != null)
{
context.ApplicationInstance.CompleteRequest();
}
}
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/582358

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX