各位好 最近在練習 net core 與 filter 應用
流程為 前端經jquery ajax 請求/處理(CRUD)資料
在後端filter時會先判斷該登入訊息是否可以繼續往下執行
不行就回傳-1,這樣前端如果接到-1值則跳轉到登出頁面要求重新登入。
但如果是呼叫 controller 裡 方法型態為 IActionResult 的方法 ex:Index()
正常情況是會回傳View("Index.cshtml")網頁
可是如果登入訊息有異常:context.Result = new BadRequestObjectResult(-1);
最後網頁內容就只會呈現 -1
如果使用context.Result = new RedirectResult("/Home/logOut");
則可以直接導向登出畫面
不過如果經 jquery ajax 請求/處理
登入訊息異常時使用 context.Result = new RedirectResult("/Home/logOut");
則ajax會接不到回傳結果
然後瀏覽器會再接到一個logOut的網頁資料(logOut的html)
(我是用瀏覽器開發者工具 看network那邊)
但我的主網頁並沒有跳轉到登出畫面
目前看起來 如果用 jquery ajax 之類的來請求/處理
在filter有異常時回傳使用 context.Result = new BadRequestObjectResult(-1);
是可行的 還可以再跳轉到登出畫面前alert()一些訊息
如果是直接請求網頁的 使用context.Result = new RedirectResult("/Home/logOut");
也能跳轉到登出畫面
想請問
那我在filter那邊要如何判斷是用 jquery ajax 之類的來請求/處理(回傳為物件)
又或者是直接呼叫網頁的(回傳網頁),來選擇context.Result的值
還是有其他不錯的做法,謝謝
public void OnActionExecuting(ActionExecutingContext context)
{
if(chkFunction() == false){
context.Result = new BadRequestObjectResult(-1);
//context.Result = new RedirectResult("/Home/logOut");
}
}
public bool chkFunction(){...}