我已经为我确定了一个挑战,即当请求是 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/