Я работаю над основным сайтом asp.net и пытаюсь сделать какую-то глобальную проверку исключений проверки с помощью фильтров.Бэкэнд может в случайных местах генерировать fluentapi ValidationException, и я хочу перехватить их и показать пользователю сообщения об ошибках.Этот фильтр заботится только о ValidationExceptions.Все остальные исключения будут обработаны позже ..
Вместо использования try / catch в каждом действии post во всех моих контроллерах, я хочу использовать фильтр, который перехватывает только ValidationExceptions, добавляет ошибки в ModelState, а затемвернитесь к исходному виду с обновленным ModelState.
Я много чего перепробовал, но каждый раз, когда фильтр заканчивал, я просто получал пустую страницу.Я могу легко установить новый RedirectToRouteResult с контроллером и действием из контекста.Но тогда у меня нет ModelState и значений, введенных пользователем.
public class PostExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
if (context.Exception is FluentValidation.ValidationException)
{
var ex = context.Exception as FluentValidation.ValidationException;
context.Exception = null;
context.HttpContext.Response.StatusCode = 200;
context.ExceptionHandled = true;
foreach (var item in ex.Errors.ToList())
{
context.ModelState.AddModelError(item.PropertyName, item.ErrorMessage);
}
// Done with the stuff I want.
// Now please go back to the original view with the updated modelstate and values
}
else if (context.Exception is UnauthorizedAccessException)
{
// Do something else...
}
else
{
// Do something else...
}
base.OnException(context);
}
}