一、問題描述
前端妹紙使用Ajax調用后台接口,我這邊在后台會判斷用戶是否登錄,如果沒有登錄,重定向到登錄頁。
后台代碼:
public class ActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { context.Result = new RedirectResult("~/Login/Index"); //context.HttpContext.Response.Redirect("~/Login/Index"); } }
而這段代碼不起作用。
二、解決
為了證明自己的清白,所以自己寫了一段測試代碼去測試是否可以重定向。
@using (Html.BeginRouteForm("Areas", new { Area = "Module", Controller = "User", Action = "GetList" }, FormMethod.Get)) { <div><input type="submit" value="跳轉" /></div>} }
結果證明自己是清白的,可以跳轉到登錄頁。那么為什么前端妹紙使用ajax不能跳轉呢?那寫一段ajax調用測試一下
function aa() { debugger $.ajax({ url: "/Module/User/GetList", data: "", type: "GET", dataType: "json", async: false, cache: false, success: function (res) { }, error: function (e) { } });
結果是不能跳轉到登錄頁
三、調用原因
查看前輩寫的代碼,他這樣寫
if (context.HttpContext.Request.IsAjaxRequest()) { TData obj = new TData(); obj.Message = "抱歉,沒有權限"; context.Result = new JsonResult(obj); } else { context.Result = new RedirectResult("~/Home/NoPermission"); }
那結論就是Ajax發起請求時,重定向的工作需要前端來做;非Ajax請求時,重定向的工作后端來做。
四、遺留問題
具體Ajax請求時后端不能重定向的原因實在找不到了,這個問題先記錄吧