Asp.net mvc 4 mvc4全局错误处理模块体系结构

Asp.net mvc 4 mvc4全局错误处理模块体系结构,asp.net-mvc-4,Asp.net Mvc 4,我以前问过这个问题,但是没有代码,下面是一个场景:我有一个基本的mvc应用程序,其中包括global.asax、ErrorController.cs和Error.cshtml。我想要实现的是将此作为我的其他mvc应用程序中所有错误处理的中心点。但似乎遇到了问题,因此任何反馈/帮助都值得赞赏。此处理程序应用程序是从另一个mvc应用程序调用的,在调用最后一行代码时:IController.Execute会导致“找不到视图”。我认为正在发生的事情是调用被传递回被调用方应用程序,由于没有该名称的视图,因

我以前问过这个问题,但是没有代码,下面是一个场景:我有一个基本的mvc应用程序,其中包括global.asax、ErrorController.cs和Error.cshtml。我想要实现的是将此作为我的其他mvc应用程序中所有错误处理的中心点。但似乎遇到了问题,因此任何反馈/帮助都值得赞赏。此处理程序应用程序是从另一个mvc应用程序调用的,在调用最后一行代码时:IController.Execute会导致“找不到视图”。我认为正在发生的事情是调用被传递回被调用方应用程序,由于没有该名称的视图,因此出现错误。因此,我希望handler应用程序使用自己的错误视图。我不知道这是否可能? 下面是global.asax中的代码

protected virtual void OnApplicationError(object sender, EventArgs e)
{
    var httpApplicationContext = ((HttpApplication) sender).Context;
    var currentController = string.Empty;
    var currentAction = string.Empty;
    var currentRouteData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpApplicationContext));

    if (currentRouteData != null)
    {
        if (currentRouteData.Values["controller"] != null && !string.IsNullOrEmpty(Convert.ToString(currentRouteData.Values["controller"])))
        {
            currentController = Convert.ToString(currentRouteData.Values["controller"]);
        }
        if (currentRouteData.Values["action"] != null && !string.IsNullOrEmpty(Convert.ToString(currentRouteData.Values["action"])))
        {
            currentAction = Convert.ToString(currentRouteData.Values["action"]);
        }
    }

    var ex = Server.GetLastError();
    var routeData = new RouteData();
    var action = "Error";
    var errorController = new ErrorController();

    httpApplicationContext.ClearError();
    httpApplicationContext.Response.Clear();
    httpApplicationContext.Response.StatusCode = ex is HttpException ? ( (HttpException)ex ).GetHttpCode() : 500;
    httpApplicationContext.Response.TrySkipIisCustomErrors = true;

    if (httpApplicationContext.Request.Headers["X-Requested-With"] != "XMLHttpRequest")
    {
        routeData.Values["controller"] = "Error";
        routeData.Values["action"] = action;
        errorController.ViewData.Model = new HandleErrorInfo(ex, currentController, currentAction);
        ((IController)errorController).Execute(new RequestContext(new HttpContextWrapper(httpApplicationContext), routeData));
    }
}

右图:经过大量的谷歌搜索和阅读,我成功地做到了: 基本上创建了另一个类库,并基于此链接添加了一个从VirtualPathProvider继承的新类。然后从MVC应用程序中添加了对该库的引用。所有这些似乎都工作正常