您的位置:首页 > 编程语言 > ASP

asp.net mvc中在Filter中跳转千万不要使用Response.Redirect

2010-10-25 11:04 519 查看
如题,如果在Filter中用Response.Redirect,虽然URL是跳转了,但是之后的Filter和Action还是会执行,不仅浪费资源,还会产生一些不必要的错误,或许,这些错误仅在你的错误日志中能看到。

 

在Filter中错误使用跳转如下:

public class AnchorFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!string.IsNullOrEmpty(filterContext.HttpContext.Request.QueryString["r_Anchor"]))
{
filterContext.HttpContext.Response.Redirect(string.Format("{0}#{1}",
filterContext.HttpContext.Request.Url.
AbsolutePath,
filterContext.HttpContext.Request.
QueryString["r_Anchor"]));
return;
}

base.OnActionExecuting(filterContext);
}
}


filterContext.HttpContext.Response.Redirect
(string.Format("{0}#{1}",

                                                                              filterContext.HttpContext.Request.Url.

                                                                                  AbsolutePath,

                                                                              filterContext.HttpContext.Request.

                                                                                  QueryString["r_Anchor"]));

filterContext.HttpContext.Response.Redirect

就会产生后遗症,正确使用应该是:

filterContext.Result = new RedirectResult(string.Format("{0}#{1}",

                                                                              filterContext.HttpContext.Request.Url.

                                                                                  AbsolutePath,

                                                                              filterContext.HttpContext.Request.

                                                                                  QueryString["r_Anchor"]));

正确代码:

public class AnchorFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!string.IsNullOrEmpty(filterContext.HttpContext.Request.QueryString["r_Anchor"]))
{
filterContext.Result = new RedirectResult(string.Format("{0}#{1}",
filterContext.HttpContext.Request.Url.
AbsolutePath,
filterContext.HttpContext.Request.
QueryString["r_Anchor"]));
//filterContext.HttpContext.Response.Redirect(string.Format("{0}#{1}",
//                                                          filterContext.HttpContext.Request.Url.
//                                                              AbsolutePath,
//                                                          filterContext.HttpContext.Request.
//                                                              QueryString["r_Anchor"]));
return;
}

base.OnActionExecuting(filterContext);
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息