查看我的filterContext.Result时,什么都不会发生。
查看我的filterContext.Result时,什么都不会发生。
我有一个自定义的异常,在某些情况下会被抛出。当它被抛出时,我想渲染一个特定的视图并输出到响应中。
在开始之前,是的,我在根级Web.config中有
。
我正在几乎完全按照Darin在这个答案中建议的方式进行操作:
public class EntityNotFoundHandleErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { if (!filterContext.IsChildAction && !filterContext.ExceptionHandled && filterContext.HttpContext.IsCustomErrorEnabled && filterContext.Exception is EntityNotFoundException) { string controllerName = (string)filterContext.RouteData.Values["controller"]; string actionName = (string)filterContext.RouteData.Values["action"]; HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); ViewResult result = new ViewResult { ViewName = this.View, ViewData = new ViewDataDictionary(model), TempData = filterContext.Controller.TempData }; filterContext.Result = result; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; } } }
并在FilterConfig.cs中进行注册(从Global.asax调用):
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new EntityNotFoundHandleErrorAttribute() { ExceptionType = typeof(Inspect.Models.EntityNotFoundException), View = "NotFound", Order = 2 }); // 注释掉只是为了确保这不会搞砸。 // filters.Add(new Utilities.ElmahHandleErrorAttribute(), 1); }
问题是,我可以确认OnException
按预期运行,但视图不显示。相反,我得到的是一个不太有用的黄色死亡屏幕,告诉我如果想看到细节,应该使用customErrors="RemoteOnly"
。
最让人气馁的是,如果我将filterContext.Result
更改为RedirectResult
,所有这些东西都能正常工作。但我不想这样做。我只想将视图写入响应中。