public override void OnException(ExceptionContext filterContext) {
string controllerName = (string) filterContext.RouteData.Values["controller"];
string actionName = (string) filterContext.RouteData.Values["action"];
// Preserve old ViewData here
var viewData = new ViewDataDictionary<HandleErrorInfo>(filterContext.Controller.ViewData);
// Set the Exception information model here
viewData.Model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
filterContext.Result = new ViewResult { ViewName = this.View, MasterName = this.Master, ViewData = viewData, TempData = filterContext.Controller.TempData };
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
//filterContext.HttpContext.Response.StatusCode = 500;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
{System.InvalidOperationException: The view 'Error' or its master was not found or no view engine supports the searched locations. The following locations were searched:
xxxxxxxx
Run Code Online (Sandbox Code Playgroud)
但我的位置不是搜索。错误方法位于MyErrorController内部。如何显式设置控制器(MyErrorController)
我的路径必须是〜/ Areas / Public / Views / MyError / Error.ascx
"area" -> "Public"
"controller", "MyError"
"action" -> "Error";
Run Code Online (Sandbox Code Playgroud)
在设置之前filterContext.Result,尝试添加以下行:
filterContext.RouteData.DataTokens["area"] = "Public";
filterContext.RouteData.Values["controller"] = "MyError";
filterContext.RouteData.Values["action"] = "Error";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1365 次 |
| 最近记录: |