我有一个普遍适用的 ExceptionHandlerAttribute 。
当发生安全异常时,我正在尝试重定向到某个页面,但也会更改URL。当子操作或其他子操作出错时,它会将错误html页面与当前页面合并:
var controllerName = (string)filterContext.RouteData.Values["controller"];
var actionName = (string)filterContext.RouteData.Values["action"];
var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
var result = new ViewResult {
ViewName = viewName,
ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
};
result.ViewBag.StatusCode = statusCode;
return result;
如何将其完全复制到帐户/登录或错误/安全等,而不是合并附加的页面。
答案 0 :(得分:0)
这是我做的:
首先定义一个派生自AuthorizeAttribute的动作过滤器。当此属性检测到用户未经过身份验证并且它是ajax请求时,它将返回403状态(mvc会使用401s进行奇怪的操作)。如果它不是ajax,请执行AuthorizeAttribute所做的常规操作。
接下来,在您的布局文件中,设置一个全局全局错误处理程序(假设您使用的是jquery),它查找403状态,如果它发现它在您的注销URL上调用location.replace。
我假设这个问题发生在ajax调用中。