APS.NET MVC RedirectToRouteResult 遇到的奇怪問題
阿新 • • 發佈:2019-01-30
之前接手了一個專案,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; } } } }