Как установить ExceptionHandled для ActionExecutedContext - PullRequest
1 голос
/ 18 января 2011

Я использую ActionFilter (который я не написал) для метода действия. Сам метод действия вызывает метод SaveOrUpdate () в хранилище. Если этот метод SaveOrUpdate () завершается ошибкой с исключением, я хотел бы установить свойство ExceptionHandled ActionExecutedContext из метода действия, чтобы метод 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 голосов
/ 24 мая 2013

Вот код, который я использую для обработки пользовательских ошибок.

filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = 500;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
0 голосов
/ 18 января 2011

Вам не нужно это делать. Просто скинуть исключение:

[MyFilter]
public ActionResult Index()
{
    throw new Exception("foo");
}

и оператор else вашего фильтра OnActionExecuted будет вызван и откат транзакции.

...