如何在ActionExecutedContext上设置ExceptionHandled

时间:2011-01-18 10:06:13

标签: asp.net-mvc action-filter

我在动作方法上使用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();
        }
    }

2 个答案:

答案 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;