¿Cómo puedo permitir que un usuario ingrese HTML en un campo particular usando ASP.net MVC?
Tengo una forma larga con muchos campos que se asignan a este objeto complejo en el controlador.
Me gustaría hacer que un campo (la descripción) permita HTML en el que preformaré mi propio saneamiento en un momento posterior.
Respuestas:
Agregue el siguiente atributo a la acción (publicación) en el controlador para el que desea permitir HTML:
Editar: según los comentarios de Charlino :
En su web.config configure el modo de validación utilizado. Ver MSDN :
Editar septiembre de 2014: según los comentarios de sprinter252 :
Ahora deberías usar el
[AllowHtml]
atributo. Ver abajo de MSDN :fuente
<httpRuntime requestValidationMode="2.0" />
en su archivo web.config.¿Qué pasa con el
[AllowHtml]
atributo sobre la propiedad?fuente
MetadataTypeAttribute
y es preferible ya que solo permite HTML en los campos individuales en lugar de en todo el objeto.Añadir al modelo:
Y a su propiedad
Este código desde mi punto la mejor manera de evitar este error. Si está utilizando el editor HTML, no tendrá problemas de seguridad porque ya está restringido.
fuente
Agregar
[AllowHtml]
la propiedad específica es la solución recomendada, ya que hay muchos blogs y comentarios que sugieren disminuir el nivel de seguridad, lo que debería ser inaceptable.Al agregar eso, el marco MVC permitirá que se golpee el controlador y se ejecute el código en ese controlador.
Sin embargo, depende de su código, filtros, etc., cómo se genera la respuesta y si hay alguna validación adicional que pueda desencadenar otro error similar.
En cualquier caso, agregar
[AllowHtml]
atributo es la respuesta correcta, ya que permite que html se deserialice en el controlador. Ejemplo en su modelo de vista:fuente
Me enfrenté al mismo problema, aunque agregué
[System.Web.Mvc.AllowHtml]
a la propiedad en cuestión como se describe en algunas respuestas.En mi caso, tengo una
UnhandledExceptionFilter
clase que accede al objeto Solicitud antes de que tenga lugar la validación MVC (y, por lo tanto, AllowHtml no tiene efecto) y este acceso aumenta a[HttpRequestValidationException] A potentially dangerous Request.Form value was detected from the client
.Esto significa que el acceso a ciertas propiedades de un objeto Solicitud activa implícitamente la validación (en mi caso, es la
Params
propiedad).Se documenta una solución para evitar la validación en MSDN
Por lo tanto, si tiene un código como este
cámbielo a
o simplemente use la
Form
propiedad que no parece activar la validaciónfuente
Si necesita permitir la entrada html para el parámetro del método de acción (en oposición a la "propiedad del modelo"), no hay una forma integrada de hacerlo, pero puede lograrlo fácilmente usando un enlazador de modelos personalizado:
El código AllowHtmlBinder:
Encuentre el código fuente completo y la explicación en mi blog: https://www.jitbit.com/alexblog/273-aspnet-mvc-allowing-html-for-particular-action-parameters/
fuente
La codificación de URL de los datos también funciona para mí
Por ejemplo
var data = '<b> Hola </b>'
En el navegador, llame a encodeURIComponent (datos) antes de publicar
En el servidor, llame a HttpUtility.UrlDecode (recibido_datos) para decodificar
De esa manera puede controlar exactamente qué área de campos puede tener html
fuente
Me he enfrentado a este problema durante el desarrollo de un sitio de comercio electrónico utilizando NopCommerce, obtuve esta solución de 3 maneras diferentes, como las respuestas anteriores. Pero de acuerdo con la estructura de NopCommerce, no encontré esos tres a la vez. Acabo de ver que allí están usando solo
[AllowHtml]
y está funcionando bien, excepto cualquier problema. Como previamente se le preguntó preguntaPersonalmente, no prefiero
[ValidateInput(false)]
porque estoy omitiendo la comprobación total de la entidad modelo, lo cual es inseguro. Pero si alguien solo escribe mira aquíentonces solo omite solo una propiedad, y solo permite una propiedad en particular y verifica apenas todas las demás entidades. Por lo tanto, parece preferible hacia el mío.
fuente
En mi caso, el atributo AllowHtml no funcionaba cuando se combinaba con el filtro de acción OutputCache. Esta respuesta resolvió el problema para mí. Espero que esto ayude a alguien.
fuente
Puedes usar
[AllowHtml]
tu proyecto por ejemploPara usar este código en la biblioteca de clases, instale este paquete
Después de usar esto
using
fuente
Desafortunadamente, ninguna de las respuestas aquí funcionó para mí.
Terminé usando Enlace de modelo personalizado y usé un desinfectante de terceros.
Vea mi pregunta contestada aquí .
fuente