我有一个类运行一些函数,有时会发生错误,我想重定向到我的errorController,但不能,因为这是在一个单独的类。
有没有办法可以使用redirectToAction或类似的东西移动到我的errorContorller?
我尝试了这个,但无法重定向,只是运行代码而没有任何事情发生。
public ActionResult Error(Dictionary<string, string> findError)
{
TempData["Error"] = findError.Keys.First();
TempData["ErrorMessage"] = findError.Values.First();
return RedirectToAction("Error", "CustomError");
}
ErrorController:
namespace MvcResComm.Controllers
{
public class CustomErrorController : Controller
{
//
// GET: /Error/
public ActionResult Index()
{
return View();
}
public ActionResult Error()
{
string message = (string)TempData["ErrorMessage"];
string ex = (string)TempData["Error"];
ViewBag.Message = "Error";
return View(new ErrorModel(ex, message));
}
}
}
答案 0 :(得分:1)
这适合我。
操作过滤器
public class HandleCustomErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
public override void OnException(System.Web.Mvc.ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
var routeData = new RouteData();
routeData.Values["controller"] = "Controller Name";
routeData.Values["action"] = "Action Method Name";
routeData.DataTokens["area"] = "Area Name"; // Optional
IController errorsController = new Controllers.ErrorController();
var rc = new RequestContext(new HttpContextWrapper(HttpContext.Current),
routeData);
errorsController.Execute(rc);
base.OnException(filterContext);
}
}
现在,您可以使用此Action Filter
表示完整的Controller
,也可以使用您遇到问题的特定Action Method
(控制器级别或操作方法级别)。
示例强>
控制器级别
[HandleCustomError(Order = 5)]
public class MyController : Controller
{
}
这将适用于Cont5roller的所有操作方法。
行动方法等级
public class MyController : Controller
{
[HandleCustomError(Order = 5)]
public ActionResult ActionMethod()
{
//Some code
}
}
这将适用于Cont5roller的特定操作方法。