Tengo una aplicación MVC3 que tiene un HandleErrorAttribute personalizado para poder enviar el error por correo electrónico. A menudo obtengo el "Se detectó un valor Request.Form potencialmente peligroso del cliente", pero solo muestra los primeros caracteres del valor del formulario que causó la excepción. Me gustaría ver el valor completo del formulario que se ingresó para tratar de obtener una mejor idea si la entrada fue maliciosa o accidental por un usuario. Sin embargo, cuando intento extraer los valores de forma en HandleErrorAttribute, arroja el mismo error. ¿Alguna idea de cómo obtener los valores de formulario de Request.Form sin causar la validación en mi controlador de excepciones?¿Cómo obtengo el valor del formulario que provocó el "Se detectó un valor Request.Form potencialmente peligroso desde el cliente" en MVC?
public class HandleErrorLogAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
base.OnException(context);
//Record Error
string errorDetails = HttpUtility.HtmlEncode(context.Exception.ToString());
// Throws "otentially dangerous..." error here
foreach (var key in context.RequestContext.HttpContext.Request.Form.AllKeys)
{
errorDetails += key + "=" + HttpUtility.HtmlEncode(context.RequestContext.HttpContext.Request.Form[key]);
}
// Send Email with errorDetails
}
}
Puede usar '[ValidateInput (false)]' y validarlo usted mismo. –
Está bien que genere un error, solo quiero saber qué entrada lo causó. Traté de agregar [ValidateInput (false)] a mi método OnException, pero todavía rehice el error. – Austin
Bueno, 'ValidateInput' en realidad no" funciona "para esto, al menos no por sí mismo. [Aquí está el por qué.] (Http://stackoverflow.com/questions/807662/why-is-validateinputfalse-not-working/2530823#2530823) El verdadero problema aquí es que no hay una manera segura de hacer esto que solo afectará a uno acción. Es una configuración global que afecta a toda la aplicación. –