Как я могу разрешить пользователю вводить HTML в определенное поле с помощью ASP.net MVC.
У меня есть длинная форма со множеством полей, которые сопоставляются с этим сложным объектом в контроллере.
Я хотел бы, чтобы одно поле (описание) разрешало HTML, на котором я буду предварительно формировать свою очистку позже.
Ответы:
Добавьте следующий атрибут action (post) в контроллер, для которого вы хотите разрешить HTML:
Изменить: согласно комментариям Чарлино :
В вашем web.config установите используемый режим проверки. См. MSDN :
Изменить сентябрь 2014 г .: Согласно комментариям sprinter252 :
Теперь вы должны использовать
[AllowHtml]
атрибут. См. Ниже из MSDN :источник
<httpRuntime requestValidationMode="2.0" />
в файле web.config.А как насчет
[AllowHtml]
атрибута над свойством?источник
MetadataTypeAttribute
и является предпочтительным, поскольку оно позволяет использовать HTML только для отдельных полей, а не для всего объекта.Добавить в модель:
И в вашу собственность
Этот код с моей точки зрения лучший способ избежать этой ошибки. Если вы используете редактор HTML, у вас не будет проблем с безопасностью, потому что он уже ограничен.
источник
Добавление
[AllowHtml]
определенного свойства является рекомендуемым решением, поскольку существует множество блогов и комментариев, предлагающих снизить уровень безопасности, что должно быть неприемлемо.Добавив это, инфраструктура MVC позволит получить доступ к контроллеру и выполнить код в этом контроллере.
Однако от вашего кода, фильтров и т. Д. Зависит, как генерируется ответ и будет ли какая-либо дополнительная проверка, которая может вызвать другую подобную ошибку.
В любом случае добавление
[AllowHtml]
атрибута - правильный ответ, поскольку он позволяет десериализовать HTML в контроллере. Пример в вашей модели просмотра:источник
Я столкнулся с той же проблемой, хотя добавил
[System.Web.Mvc.AllowHtml]
к соответствующему свойству, как описано в некоторых ответах.В моем случае у меня есть
UnhandledExceptionFilter
класс, который обращается к объекту Request до того, как выполняется проверка MVC (и поэтому AllowHtml не действует), и этот доступ вызывает файл[HttpRequestValidationException] A potentially dangerous Request.Form value was detected from the client
.Это означает, что доступ к определенным свойствам объекта Request неявно запускает проверку (в моем случае это
Params
свойство).Решение для предотвращения проверки задокументировано в MSDN.
Поэтому, если у вас есть такой код
измените это на
или просто используйте
Form
свойство, которое, похоже, не запускает проверкуисточник
Если вам нужно разрешить ввод html для параметра метода действия (в отличие от «свойства модели»), встроенного способа сделать это нет, но вы можете легко добиться этого с помощью настраиваемого связывателя модели:
Код AllowHtmlBinder:
Найдите полный исходный код и объяснение в моем сообщении в блоге: https://www.jitbit.com/alexblog/273-aspnet-mvc-allowing-html-for-particular-action-parameters/
источник
URL-кодирование данных также работает для меня
Например
var data = '<b> Привет </b>'
В браузере вызовите encodeURIComponent (data) перед публикацией
На сервере вызовите HttpUtility.UrlDecode (Received_data) для декодирования
Таким образом вы можете точно контролировать, в какой области полей разрешено иметь html.
источник
Я столкнулся с этой проблемой во время разработки сайта электронной коммерции с использованием NopCommerce, я получил это решение 3 разными способами, как и в предыдущих ответах. Но согласно структуре NopCommerce я не нашел этих трех одновременно. Я только что видел, что они используют просто,
[AllowHtml]
и он работает нормально, за исключением каких-либо проблем. Как ранее заданный вопросЛично я не предпочитаю,
[ValidateInput(false)]
потому что я пропускаю полную проверку сущностей модели, что небезопасно. Но если кто-нибудь просто напишет , взгляните сюдатогда он просто пропускает только одно свойство и разрешает только конкретное свойство и почти не проверяет все другие объекты. Поэтому мне кажется предпочтительнее.
источник
В моем случае атрибут AllowHtml не работал в сочетании с фильтром действия OutputCache. Этот ответ решил проблему для меня. Надеюсь, это кому-то поможет.
источник
Вы можете использовать в
[AllowHtml]
своем проекте, напримерДля использования этого кода в библиотеке классов вы устанавливаете этот пакет
После использования этого
using
источник
К сожалению, ни один из ответов здесь не помог мне.
В итоге я использовал Custom Model Binding и сторонний Sanitizer.
См. Мой вопрос с самоответом здесь .
источник