我正在努力使我的ASP.NET MVC应用程序正确处理HTTP状态代码,并在需要时为它们显示视图。我正在避免所有开箱即用的错误页面处理,因为它不是语义的(例如,框架总是使用customErrors
执行302重定向)。
我有一个AuthorizeAttribute
和ActionFilterAttribute
,它们都正常工作,并显示我的自定义视图。但是,我的HandleErrorAttribute
工作不正常。
public override void OnException(ExceptionContext context) {
HttpStatusCode httpStatusCode = HttpStatusCode.InternalServerError;
var e = context.Exception;
if (e is HttpException) {
var httpException = (HttpException)e;
httpStatusCode = (HttpStatusCode)httpException.GetHttpCode();
}
context.Result = MyResultBuilder.SetViewByHttpCode(context.HttpContext.Request, httpStatusCode, context.Controller.ViewData.ModelState);
}
我正在设置Result
属性,但在某些时候,管道覆盖了我的结果,因为我最终得到了黄色死亡屏幕(YSOD),而不是我定义的视图结果。
如何在HandleErrorAttribute
?