我在动作方法上使用ActionFilter(我没写过)。 action方法本身在存储库上调用SaveOrUpdate()方法。如果SaveOrUpdate()方法因异常而失败,我想在action方法中设置ActionExecutedContext的ExceptionHandled属性,以便OnActionExecuted方法不会尝试提交事务。
我该怎么做?这是解决这个问题的正确方法,还是应该以不同的方式做到这一点?
以下是过滤器的OnActionExecuted中的代码:
public void OnActionExecuted(ActionExecutedContext filterContext)
{
var thereWereNoExceptions = filterContext.Exception == null || filterContext.ExceptionHandled;
if (filterContext.Controller.ViewData.ModelState.IsValid && thereWereNoExceptions)
{
_transaction.Commit();
}
else
{
_transaction.Rollback();
}
}
答案 0 :(得分:0)
您不需要这样做。只是抛出异常:
[MyFilter]
public ActionResult Index()
{
throw new Exception("foo");
}
并且else
过滤器的OnActionExecuted
语句将被点击并回滚该事务。
答案 1 :(得分:0)
以下是我用来处理自定义错误的代码。
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = 500;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;