MVC 4从错误重定向

时间:2013-12-13 03:00:57

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我有一个普遍适用的 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;

如何将其完全复制到帐户/登录或错误/安全等,而不是合并附加的页面。

enter image description here

1 个答案:

答案 0 :(得分:0)

这是我做的:

首先定义一个派生自AuthorizeAttribute的动作过滤器。当此属性检测到用户未经过身份验证并且它是ajax请求时,它将返回403状态(mvc会使用401s进行奇怪的操作)。如果它不是ajax,请执行AuthorizeAttribute所做的常规操作。

接下来,在您的布局文件中,设置一个全局全局错误处理程序(假设您使用的是jquery),它查找403状态,如果它发现它在您的注销URL上调用location.replace。

我假设这个问题发生在ajax调用中。