C# 路径'/Views/Shared/Error.cshtml';找不到

C# 路径'/Views/Shared/Error.cshtml';找不到,c#,asp.net-mvc,error-handling,C#,Asp.net Mvc,Error Handling,我的基地控制器里有这个 protected override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled) { return; } var logger = new Logger(); logger.LogError(filterContext.Exception, ControllerContext.Route

我的基地控制器里有这个

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”

但根据这一点,这应该是可行的


这怎么可能呢?

我想你不需要全名,因为这是默认页面。试试看

filterContext.Result = new ViewResult
{
    ViewName = "Error",
    ViewData = new ViewDataDictionary()
    {
        {"exception", filterContext.Exception}
    }
};

我希望这对你有用

我想你不需要全名,因为这是默认页面。试试看

filterContext.Result = new ViewResult
{
    ViewName = "Error",
    ViewData = new ViewDataDictionary()
    {
        {"exception", filterContext.Exception}
    }
};

我希望这对你有用

真奇怪。然而,
ViewData
初始化为新对象可能是这种行为的原因。为了确认这一点,您可以进行其中一项更改--1)使用ViewData返回ViewResult 2)而不是创建新的ViewResult对象,将其定义为
filterContext.Result=this.View(“~/Views/Shared/Error.cshtml”,filterContext.Exception)
。传递给视图的异常对象可以通过
ViewData.Model
object访问。这很奇怪。然而,
ViewData
初始化为新对象可能是这种行为的原因。为了确认这一点,您可以进行其中一项更改--1)使用ViewData返回ViewResult 2)而不是创建新的ViewResult对象,将其定义为
filterContext.Result=this.View(“~/Views/Shared/Error.cshtml”,filterContext.Exception)
。传递给视图的异常对象可由
ViewData.Model
object访问。