1. 程式人生 > >APS.NET MVC RedirectToRouteResult 遇到的奇怪問題

APS.NET MVC RedirectToRouteResult 遇到的奇怪問題

之前接手了一個專案,coding完成之後測試的時候發現一個奇怪的問題,有時候會出現連結會自動跳轉到登入頁面,然後我開始設斷點調程式碼, 但是根本就不進斷點,很奇怪。過了段時間,這種現象會出現在各個地方,隨機發生。 

然後用chrome 開發工具檢視,其實那個連結是被重定向了,HTTP 狀態碼 301 (Permanently Moved), 來源 from disk cache , 看來是被瀏覽器快取了,再檢視之前別人寫的登入過濾器,原來是RedirectToRoutResult多加了一個引數,把true去掉應該就可以了,去掉之後測試,那個奇怪的問題就解決了。

結論:越是奇怪的問題越低階

程式碼如下:

public void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
        {
           
           if(CheckLogin)  //可以定製
            {
                Staff staff = (Staff)filterContext.HttpContext.Session[SysConstant.STAFF];
                if (staff == null)
                {
                    if (filterContext.HttpContext.Request.IsAjaxRequest())   //判斷是否ajax請求
                    {
                        filterContext.Result = new System.Web.Mvc.JsonResult()
                        {
                            Data = new {Code = 301 ,Msg="會話失效,請重新登入"},
                            ContentEncoding = System.Text.Encoding.UTF8,
                            JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                            ContentType = "json"
                        };
                        return;
                    }
                    else
                    {
                        filterContext.Result = new RedirectToRouteResult(
                            "Default", new System.Web.Routing.RouteValueDictionary(new Dictionary<string, object>() { { "controller", "Home" }, { "action", "Login" } },true));    //重定向
                        return;
                    }
                }
            }
        }