asp.net mvc中在Filter中跳轉千萬不要使用Response.Redirect[轉]

查看原文

如題,如果在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);  
        }  
    }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章