.net 里Response.Redirect无效

friskz 2009-01-02 02:17:15
我想用IHttpModule拦截用户访问,所以写了一个类public class MyModule : IHttpModule.如果用户session为空就跳转,里面有一个方法如下。但是没有效果,请问什么原因,调试了发现有一个异常。"由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值",按照别人的解决方案还是不行。例如HttpContext.Current.Response.Redirect("/login.html",true); 换成HttpContext.Current.Response.Redirect("/login.html",false);和去掉try catch等,但问题依旧,请问如何处理,我用的wcf+linq+ext。
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using ConairOAS.Common;
using System.Web.UI.Design;
namespace ConairOAS.Common
{
public class ConairModule : IHttpModule
{
public static int loginflag = 0;
public void Init(HttpApplication application)
{

application.AcquireRequestState += (new
EventHandler(this.Application_AcquireRequestState));
}
private void Application_AcquireRequestState(Object source,
EventArgs e)
{
HttpApplication Application = (HttpApplication)source;
HttpContext context = HttpContext.Current;
HttpResponse Response = context.Response;
Response.Redirect("http://www.baidu.com");//放在这里会有效果 Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
string path = context.Request.Url.AbsolutePath.ToLower();
if (path.Contains("index.aspx") && loginflag == 0)
{
Response.Redirect("/login.html");
}
if (path.Contains(".svc/"))
{
if (path.Contains("login.svc/validateuser"))
{
loginflag++;
}
else if (path.Contains("logout.svc/clearusersession"))
{
loginflag = 0;
}
else
{
loginflag++;
Response.Redirect("http://www.baidu.com");//放在这里没有效果 string objectSid = checkSession(context);//session验证

}
}
}
public string checkSession(HttpContext context)
{
string objectSid ;
try
{
objectSid = context.Session["objectSid"].ToString();
return objectSid;
}
catch(Exception ex)
{
Response.Redirect("http://www.baidu.com");//放在这里也没有效果
throw ex;
}

}
}
}
...全文
1442 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
ligangxiao 2011-11-17
  • 打赏
  • 举报
回复
我也遇到这样的问题哦,哎,郁闷,顶顶顶!!!
shshjun 2011-10-18
  • 打赏
  • 举报
回复
System.Threading.ThreadAbortException 这个错误是每次Response.Redirect 或server.transfer都会有的。这个exception应该过滤掉。就是不要throw出来,要不然你的catch段执行就影响了你的页面跳转。
Im_Sorry 2011-10-18
  • 打赏
  • 举报
回复
刚才看了你的问题,如果真的没法解决,可以增加一个跳板! 先让它跳转到站内,然后在page_load里面进行外跳!
Im_Sorry 2011-10-18
  • 打赏
  • 举报
回复
Response.Redirect("http://www.baidu.com"); 这样可以跳转啊!

yuanzhuohang 2011-10-18
  • 打赏
  • 举报
回复
我也遇到过类似问题..
结果发现原来是我的web.config配置有问题..

可能是因为你在web.config那里禁止了匿名用户打开你登录之后的页面;
如果你重新写了一个成员资格提供程序类,也有可能是你没有指定你自己写的成员资格程序提供类作为你默认的成员资格提供类。
guoyong4321 2010-08-25
  • 打赏
  • 举报
回复
用ajax了吧
ItAzure 2010-07-13
  • 打赏
  • 举报
回复
我也遇到类似的问题!
riusmary 2009-08-31
  • 打赏
  • 举报
回复
ding
friskz 2009-01-05
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 Riverwcj 的回复:]
应该是执行条件不明确.服务器不能正确执行.不如设个断点试试.单步执行
[/Quote]
这样坐过了。
oranrry 2009-01-05
  • 打赏
  • 举报
回复
后面加一个
Response.End()
试一下
ilmarezhou 2009-01-05
  • 打赏
  • 举报
回复
找你们的测试人员帮你试试...肯定有些流程没走..
isboc 2009-01-05
  • 打赏
  • 举报
回复
httpcontent.current.response.redirect();
改成这个~~
friskz 2009-01-05
  • 打赏
  • 举报
回复
to only_endure 逻辑没有问题。
我先HttpContext.Current.Session.RemoveAll()了里面的数据。然后再读session,读不到就catch,跳转。
mengxj85 2009-01-03
  • 打赏
  • 举报
回复
关注一下
zhuxianzhu 2009-01-03
  • 打赏
  • 举报
回复
是你程序的问题
bj890 2009-01-03
  • 打赏
  • 举报
回复
up
tm62490309 2009-01-03
  • 打赏
  • 举报
回复
是不是没进到哪个语句?
qinqinhao 2009-01-03
  • 打赏
  • 举报
回复
ding
Riverwcj 2009-01-03
  • 打赏
  • 举报
回复
应该是执行条件不明确.服务器不能正确执行.不如设个断点试试.单步执行
Robin 2009-01-03
  • 打赏
  • 举报
回复
Response.Redirect

  Response.Redirect方法导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。

  这就是说,使用Response.Redirect方法时重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求,得到一个302应答,第二次是请求302应答中声明的新页面,得到重定向之后的页面。
产生新的CONTEXT
Redirect是客户端的方法,好处是浏览器知道是传的,历史记录也会被更新,缺点是会影响性能,因为它还要与服务器回发
加载更多回复(28)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧