Как я могу игнорировать HttpRequestValidationException и кодировать HTML самостоятельно во время привязки модели? - PullRequest
3 голосов
/ 18 марта 2011

Я пытаюсь выяснить, как можно игнорировать исключение HttpRequestValidationException, возникающее при привязке модели.

Вот в чём дело, я знаю, как обрабатывать HTML, публикуемый и привязанный к свойству, которое ожидает HTML (используя атрибут AllowHtml), но когда пользователь публикует HTML в поле, которое не должно разрешать HTML, я хочу автоматически закодируйте это значение во время привязки к модели.

Я создал привязку пользовательской модели, чтобы перехватывать генерируемое исключение HttpRequestValidationException, но всякий раз, когда я пытаюсь получить значение из Request.Form, выдается то же исключение.

Существует ли автоматический способ сделать это в MVC3?

Нужно ли добавлять AllowHtml ко всем свойствам модели, а затем самому кодировать его в действии?

Могу ли я получить доступ к отправляемому мне HTML во время привязки модели, не вызывая HttpRequestValidationException каждый раз, когда я запрашиваю его из Request.Form?

Спасибо за любую помощь, которую вы можете предоставить.

Редактировать Я не хочу отключать проверку всего действия. Немного радикально, если я хочу убедиться, что исключение не выдается, когда кто-то вводит html в форме, которой он не должен иметь.

Ответы [ 3 ]

3 голосов
/ 15 ноября 2012

Та же проблема произошла со мной.Даже в этой старой теме я хотел бы поделиться решением.Ответ найти сложно, но очень просто.Существует метод расширения, который позволяет получить доступ к форме и строке запроса без проверки.

System.Web.Helpers.UnvalidatedRequestValues unvalidatedRequest = System.Web.Helpers.Validation.Unvalidated(Context.Request)
System.Collections.Specialized.NameValueCollection form = unvalidatedRequest.form

Нет необходимости в requestValidationMode или отключении проверки вообще. Эта статья привела меня к решению.

2 голосов
/ 20 ноября 2014

Для меня ответ от fan711 теперь ограничен.Теперь вы должны использовать

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
{ 
    //... code here 
    controllerContext.HttpContext.Request.Unvalidated.Form.GetValues(key); 
    //... code here 
}
0 голосов
/ 18 марта 2011

Что-то вроде:

[HttpPost, ValidateInput(false)]
public ActionResult Edit(FormCollection collection)
{
    // ...
}

См. Это подробнее: Потенциально опасное значение Request.Form обнаружено клиентом

...