asp.net-mvc vb.net tinymce request.form

asp.net mvc - ¿Por qué ValidateInput(False) no funciona?



asp.net-mvc vb.net (7)

Estoy convirtiendo una aplicación que creé usando formularios web en el framework asp.net mvc usando vb.net. Tengo un problema con uno de mis puntos de vista. Aparece la pantalla amarilla de la muerte que dice "Se detectó un valor Request.Form potencialmente peligroso del cliente" cuando envío mi formulario. Estoy utilizando tinymce como mi RTE. Me he puesto en la vista

ValidateRequest = "falso"

Sé que en MVC no lo respeta en la vista por lo que he leído hasta ahora. Así que también lo puse en la acción del controlador. He probado diferentes configuraciones:

<ValidateInput(False), AcceptVerbs(HttpVerbs.Post)> _

...y...

<AcceptVerbs(HttpVerbs.Post), ValidateInput(False)> _

... y así también ...

<ValidateInput(False)> _ <AcceptVerbs(HttpVerbs.Post)> _

Solo para ver si hizo una diferencia, aún así obtengo la pantalla amarilla de la muerte. Solo quiero configurarlo para esta vista y la acción específica en mi controlador a la que pertenece mi publicación. ¿Me estoy perdiendo de algo?


¿Estás seguro de que la acción del controlador que se está publicando es en la que tienes los atributos?


Agregue la siguiente línea de código:

GlobalFilters.Filters.Add(new ValidateInputAttribute(false));

al método Application_Start ().


Con asp.net 4, también deberá configurar el modo de validación en web.config.

Establezca lo siguiente como elemento secundario del elemento <system.web> :

<system.Web> ... <httpRuntime requestValidationMode="2.0"/>

Asp.Net 4 establece el requestValidationMode en 4.0 de forma predeterminada, que le dice al sistema que realice la validación de la solicitud antes de la fase BeginRequst de la solicitud HTTP. La validación ocurrirá antes de que el sistema llegue al atributo de acción que le indica que no valide la solicitud, lo que hace que el atributo sea inútil. El establecimiento de requestValidationMode = "2.0" revertirá al comportamiento de validación de solicitud de asp.net 2.0, lo que permite que el atributo ValidateInput funcione como se espera.


Cuando utiliza sus propios archivos de modelo que implementan la interfaz de IModelBinder , observará que los archivos de modelo personalizados siempre validan los datos, independientemente de los atributos. Puede agregar algunas líneas de código para que los archivadores de modelo personalizados respeten el filtro ValidateInput de las acciones:

// First check if request validation is required var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled; // Get value var valueProviderResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation); if (valueProviderResult != null) { var theValue = valueProviderResult.AttemptedValue; // etc... }

Esto lo explica muy bien Martijn Boland aquí: http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/


Puede intentar acceder al campo como HttpContext.Request.Unvalidated.Form ["FieldName"]


Si usa un modelo de entrada y usa un AllowHtml en la propiedad que desea, se desbloqueará.

public class InputModel { [AllowHtml] public string HtmlInput { get; set; } } ... [ValidateInput(false)] public async Task<ActionResult> ControllerMethod(InputModel model) { }