Как мне обработать HttpRequestValidationException и вернуть значимую ошибку, используя AddModelError? - PullRequest
2 голосов
/ 16 декабря 2011

Я хотел бы обработать HttpRequestValidationExceptions (например, когда html вставлен в поля формы) и вернуть пользователя обратно на страницу после отправки с существенной ошибкой, чтобы выделить проблему.

Например, на странице входа в систему, если пользователь вводит недопустимые символы в поле имени пользователя, я хотел бы перехватить исключение HttpRequestValidationException и вернуть пользователя на страницу входа с выделенным полем имени пользователя. .

Я могу уловить ошибку в классе, унаследованном от HandleErrorAttribute с использованием метода OnException .

Есть ли способ отсюда (или любым другим способом), что я могу заставить Controller * ModelState * добавить ошибку?

Примечание. Я не хочу отключать проверку или перенаправлять на страницу с ошибкой.

например:.

public override void OnException(ExceptionContext filterContext)
{
    if (filterContext.Exception is HttpRequestValidationException)
        {
            ModelStateDictionary ModelState = <...>
            ModelState.AddModelError("Error", "Invalid chars");
            filterContext.HttpContext.Response
            filterContext.ExceptionHandled = true;
            HttpContextBase HttpContext = filterContext.HttpContext;
            HttpContext.Response.Redirect(HttpContext.Request.Path);

            return;
        }
}

Заранее благодарим за любую помощь, которую вы можете мне оказать!

1 Ответ

0 голосов
/ 16 декабря 2011

Вместо захвата и обработки HttpRequestValidationException, вы можете декорировать свойства вашей модели с помощью [AllowHtml] аннотации данных и вашей собственной аннотации данных , которая содержит правила проверкивам требуется.См. этот ответ для хорошего примера.

Свойства вашей модели могут выглядеть следующим образом:

[AllowHtml]
[DisallowHtml]
public string SomeProperty{ get; set; }

Что выглядит немного глупо, но пока это самое чистое решениеЯ столкнулся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...