【问题标题】:ViewResult for my filterContext.Result does nothing我的 filterContext.Result 的 ViewResult 什么都不做
【发布时间】:2014-02-19 00:33:59
【问题描述】:

我有一个在某些情况下会抛出的自定义异常。当它被抛出时,我想渲染一个特定的视图并将其输出到响应中。

在开始之前,是的,我的根级 Web.config 中有 <customErrors mode="On" />

我所做的几乎完全符合 Darin 在 this answer 中的建议:

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<HandleErrorInfo>(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
    });


    // Commented out just to be sure this isn't screwing it up.
    // filters.Add(new Utilities.ElmahHandleErrorAttribute(), 1);

}

交易是,我可以确认OnException 正在按预期运行,但视图不显示。相反,我得到了无用的黄屏死机版本,告诉我如果我想查看详细信息,我应该使用customErrors="RemoteOnly"

如果我将filterContext.Result 更改为RedirectResult,那么所有这些东西都会起作用。但我不想那样做。我只想将视图写入响应。

【问题讨论】:

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


    【解决方案1】:

    this.View 的值为"NotFound"。将其更改为"~/Views/Errors/NotFound" 即可解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 2017-11-23
      • 2015-07-18
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      相关资源
      最近更新 更多