iT邦幫忙

2

關於net core filter回傳資料

各位好 最近在練習 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(){...}
fillano iT邦超人 1 級 ‧ 2020-02-27 07:12:48 檢舉
https://stackoverflow.com/questions/19660280/unable-to-check-request-isajaxrequest-inside-my-action-filter-class
xSummer iT邦新手 4 級 ‧ 2020-02-27 09:43:38 檢舉
謝謝 我當初還怕說我描述的不夠好
補充一下在net core 裡要判斷是否為前端送出的同步/非同步請求
可以使用context.HttpContext.Request.Headers["x-requested-with"] == "XMLHttpRequest"
來判斷

尚未有邦友回答

立即登入回答