C# 从MVC应用程序中的OneException方法路由到视图
在操作中引发异常时,我正在尝试将应用程序重新路由到同一视图:C# 从MVC应用程序中的OneException方法路由到视图,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,在操作中引发异常时,我正在尝试将应用程序重新路由到同一视图: [HttpPost] public EmptyResult Action(ModelClass modelObject) { _facade.update(modelObject); return new EmptyResult(); } protected override void OnException(ExceptionContext filterContext) { if (filterConte
[HttpPost]
public EmptyResult Action(ModelClass modelObject)
{
_facade.update(modelObject);
return new EmptyResult();
}
protected override void OnException(ExceptionContext filterContext)
{
if (filterContext.Exception is MyException)
{
var controllerName = (string)filterContext.RouteData.Values["controller"];
var actionName = (string)filterContext.RouteData.Values["action"];
var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
filterContext.Result = new ViewResult
{
ViewName = "~/Views/ViewFolder/View.cshtml",
ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
TempData = filterContext.Controller.TempData
};
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
}
base.OnException(filterContext);
}
[HttpPost]
公共EmptyResult操作(ModelClass modelObject)
{
_facade.update(modelObject);
返回新的EmptyResult();
}
受保护的覆盖无效OneException(ExceptionContext filterContext除外)
{
if(filterContext.Exception是MyException)
{
var controllerName=(字符串)filterContext.RouteData.Values[“controller”];
var actionName=(字符串)filterContext.RouteData.Values[“action”];
var model=newhandleerrorinfo(filterContext.Exception、controllerName、actionName);
filterContext.Result=新的ViewResult
{
ViewName=“~/Views/ViewFolder/View.cshtml”,
ViewData=新的ViewDataDictionary(型号),
TempData=filterContext.Controller.TempData
};
filterContext.HttpContext.Response.StatusCode=(int)HttpStatusCode.InternalServerError;
}
base.OnException(filterContext);
}
我缺少什么?视图名称是按约定映射的。您不需要放置完整路径 结果的视图名称将具有显式指定的视图名称 传递给结果。在运行时,如果未指定视图名称 然后ASP.NET MVC将使用 路由系统。它无法在单元测试中“猜测” 视图名称应该是什么 你可以在StackOverflow.com上找到这篇文章的更多信息:
受保护的覆盖无效OneException(ExceptionContext filterContext)
{
if(filterContext.Exception是MyException)
{
var controllerName=(字符串)filterContext.RouteData.Values[“controller”];
var actionName=(字符串)filterContext.RouteData.Values[“action”];
var model=newhandleerrorinfo(filterContext.Exception、controllerName、actionName);
filterContext.Result=新的ViewResult
{
ViewName=actionName,
ViewData=新的ViewDataDictionary(型号),
TempData=filterContext.Controller.TempData
};
filterContext.HttpContext.Response.StatusCode=(int)HttpStatusCode.InternalServerError;
}
base.OnException(filterContext);
}
视图名称按约定映射。您不需要放置完整路径
结果的视图名称将具有显式指定的视图名称
传递给结果。在运行时,如果未指定视图名称
然后ASP.NET MVC将使用
路由系统。它无法在单元测试中“猜测”
视图名称应该是什么
你可以在StackOverflow.com上找到这篇文章的更多信息:
受保护的覆盖无效OneException(ExceptionContext filterContext)
{
if(filterContext.Exception是MyException)
{
var controllerName=(字符串)filterContext.RouteData.Values[“controller”];
var actionName=(字符串)filterContext.RouteData.Values[“action”];
var model=newhandleerrorinfo(filterContext.Exception、controllerName、actionName);
filterContext.Result=新的ViewResult
{
ViewName=actionName,
ViewData=新的ViewDataDictionary(型号),
TempData=filterContext.Controller.TempData
};
filterContext.HttpContext.Response.StatusCode=(int)HttpStatusCode.InternalServerError;
}
base.OnException(filterContext);
}
视图名称需要与控制器上的操作的名称匹配。在哪个上下文中?一般来说,视图名称不需要与控制器上的操作的名称匹配。在哪个上下文中?一般来说,它不需要
protected override void OnException(ExceptionContext filterContext)
{
if (filterContext.Exception is MyException)
{
var controllerName = (string)filterContext.RouteData.Values["controller"];
var actionName = (string)filterContext.RouteData.Values["action"];
var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
filterContext.Result = new ViewResult
{
ViewName = actionName,
ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
TempData = filterContext.Controller.TempData
};
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
}
base.OnException(filterContext);
}