c# - 通知 ajax 调用 session 已超时或用户需要重新验证

标签 c# ajax asp.net-mvc asp.net-mvc-4 kendo-ui

我已经为我确定了一个挑战,即当请求是 ajax 时,能够记录并继续/通知用户服务器异常。在基本 Controller 中使用 OnException 并寻找请求是 ajax 我可以返回一个自定义的“...uhoh” View 来呈现。

现在,我正在与未经身份验证的部分作斗争。我正在努力处理我想用来代替基类中的 [Authorize] 属性的修改后的代码。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class AjaxAuthorizeAttribute : AuthorizeAttribute
    {
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.Result = new JsonResult{Data = new{NotAuthenticated=1}, JsonRequestBehavior = JsonRequestBehavior.AllowGet};
            }
            else
            {
                base.HandleUnauthorizedRequest(filterContext);
            }
        }
    }

目前,在一些领域,这可以将 NotAuthenticatedas 数据返回到客户端中的 Ajax 调用。我这样做是对的吗?刚刚找到以 Ajax 结尾的主要流程。

if(returnData.NotAuthenticated){
    if (that.onNotAuthenticated != null)
       that.onNotAuthenticated();
    else
      _loadView(viewElement, "Request requires authorization. Please login again.");
} else
      _loadView(viewElement, returnData);
}

但是,我正在使用 Kendo 完整库和可能的其他库。当通过 Ajax 调用触发时,是否有更好的“全局”方式来处理 session 超时或身份验证重定向?

请帮忙!

最佳答案

我认为Global Ajax Event Handlers满足您的需求。例如,以下代码设置了一个全局错误处理程序,如果她的 session 超时,它将把用户重定向到登录页面。

$(document).ajaxError(function (event, jqxhr, settings, exception) {
    if (jqxhr.status == 401 || jqxhr.statusText == "Unauthorized") {
        window.location.href = '/login';
    }
});

关于c# - 通知 ajax 调用 session 已超时或用户需要重新验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23556090/

相关文章:

java - 为什么C#对 'Constructor call must be the first statement in a constructor'没有限制

c# - 无法使用单例 yyy 的作用域服务 xxx

jquery - Bootstrap 模式在 4 秒或用户单击后关闭

javascript - 如何更改 AJAX 响应 HTML,然后继续在 jQuery 中替换?

javascript - 获取上传进度时 XMLHttpRequest 的替代方案

c# - 在 WPF ComboBox 中设置默认值

c# - 罗斯林的工作区

javascript - 如何使用 Ajax 从 Django 捕获 PermissionDenied(403)?

c# - 在 System.Web.HttpContext.Current.Cache 中存储一个空值

asp.net - .NET MVC 还是普通的 ASP.NET?