如題,如果在Filter中用Response.Redirect,雖然URL是跳轉了,但是之後的Filter和Action還是會執行,不僅浪費資源,還會產生一些不必要的錯誤,或許,這些錯誤僅在你的錯誤日誌中能看到。
在Filter中錯誤使用跳轉如下:
[c-sharp] view plaincopy 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 就會產生後遺症,正確使用應該是:
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); } }