我正在使用ActionFilter來檢查用戶的會話是否是該用戶的最新會話。如果他們已經登錄另一個會話,則舊會話無效。所以,我正在檢查每個被調用的操作,如果他們沒有使用最新的會話,就將它們簽出。我遇到的問題是我的方法不適用於AJAX調用。正常的GET或POST調用工作正常。AJAX調用時ActionFilterAttribute出錯
public class DuplicateLoginFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var user = Membership.GetUser(HttpContext.Current.User.Identity.Name);
if (user != null)
{
if (!PortalDA.GetUserSession(user.UserName).Trim().Equals(HttpContext.Current.Session.SessionID))
{
FormsAuthentication.SignOut();
filterContext.Result = new RedirectResult(@"\Home\SessionExprired");
}
}
base.OnActionExecuting(filterContext);
}
我想我解決這個問題的最大問題是,我得到一個錯誤,但我無法捕捉它在任何地方。
我在webconfig中打開了自定義錯誤。我重寫了所有控制器中的OnException事件。我也覆蓋了global.asax中的Application_Error事件。
我已經遍歷代碼,當我進行AJAX調用時,我返回SessionExpired視圖。但是在那之後的某個地方發生錯誤,我不能再繼續下去。錯誤不會被覆蓋的錯誤事件捕獲。然後我發送到自定義錯誤頁面。
我懷疑它與HTTPHeaders有關,但我不明白他們知道如何解決它,如果它是AJAX調用。
謝謝!用你的路線,而不是硬編碼的網址
我得到了相同的結果(發送到錯誤頁面)。是的,行動和看法存在。它在正常的GET或POST時有效。只是沒有在AJAX電話 –
這樣做!我返回了一個JSON對象並在JQuery中重定向。謝謝! –