之前我问过这个问题,但是没有代码,这里是场景:我有一个基本的mvc应用程序,其中包括global.asax,ErrorController.cs和Error.cshtml。我想要实现的是将其作为我其他mvc应用程序中所有错误处理的中心点。但似乎已经碰壁,所以任何反馈/帮助表示赞赏。这个处理程序应用程序从另一个mvc应用程序调用,并在调用最后一行代码时:(IController).Execute()导致'view not found'。我认为正在发生的调用是传递给被调用者应用程序,因为没有该名称的视图,因此错误。所以,我想要的是处理程序应用程序使用自己的错误视图。我不知道这是否可能? 这是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));
}
}
答案 0 :(得分:0)
正确:经过大量的谷歌搜索和阅读后,我成功完成了这项工作: 基本上创建了另一个类库,并添加了一个基于此链接http://www.danielroot.info/2013/07/reuse-mvc-views-using-virtual-path.html从VirtualPathProvider继承的新类。然后从MVC app添加了对这个库的引用,似乎一切正常。