【发布时间】:2018-05-28 05:15:34
【问题描述】:
我的基本控制器中有这个
protected override void OnException(ExceptionContext filterContext)
{
if (filterContext.ExceptionHandled)
{
return;
}
var logger = new Logger();
logger.LogError(filterContext.Exception, ControllerContext.RouteData.Values["controller"].ToString());
filterContext.Result = new ViewResult
{
ViewName = "~/Views/Shared/Error.cshtml",
ViewData = new ViewDataDictionary()
{
{"exception", filterContext.Exception}
}
};
filterContext.ExceptionHandled = true;
}
我肯定有一个文件
Views/Shared/Error.cshtml
但是每当发生未处理的异常时,我都会在日志中收到此错误
找不到路径“/Views/Shared/Error.cshtml”。
但根据this article,这应该可行...
这怎么可能?
【问题讨论】:
-
这很奇怪。然而似乎
ViewData初始化为新对象可能是这种行为的原因。只是为了确认这一点,您可以进行更改之一 --- 1) 返回 ViewResult 和 ViewData 2) 而不是创建新的 ViewResult 对象,将其定义为filterContext.Result = this.View("~/Views/Shared/Error.cshtml", filterContext.Exception)。传递给View的异常对象,可以通过ViewData.Model对象访问。
标签: c# asp.net-mvc error-handling