我已经为我挑战了一个挑战,即当请求是ajax时,能够记录并继续/通知用户有关服务器异常的信息。使用基本控制器中的OnException
并查找作为ajax的请求,我可以返回要呈现的自定义“... uhoh”视图。
现在,我正在与未经过身份验证的部分进行斗争。我正在努力使用这个修改过的代码,而我正在考虑使用这个代码替换基类中的[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调用触发时,是否有更好的“全局”方式来处理会话超时或auth重定向?
请帮忙!
答案 0 :(得分:3)
我认为Global Ajax Event Handlers
符合您的需求。例如,下面的代码设置了一个全局错误处理程序,如果她的会话超时,它将把用户重定向到登录页面。
$(document).ajaxError(function (event, jqxhr, settings, exception) {
if (jqxhr.status == 401 || jqxhr.statusText == "Unauthorized") {
window.location.href = '/login';
}
});