net iis7 enable deploy aspx asp application c# asp.net asp.net-3.5 iis-7.5 global-asax

c# - iis7 - iis enable asp net



Cómo capturar HttpRequestValidationException en producción (2)

Ok, lo encontré a mi mismo. Debo aclarar mi último error.

protected void Application_Error(object sender, EventArgs e) { var context = HttpContext.Current; var exception = context.Server.GetLastError(); if (exception is HttpRequestValidationException) { context.Server.ClearError(); // Here is the new line. Response.Clear(); Response.StatusCode = 200; Response.Write(@"<html><head></head><body>hello</body></html>"); Response.End(); return; } }

Tengo este fragmento de código para manejar la excepción HttpRequestValidationException en mi archivo global.asax.cs.

protected void Application_Error(object sender, EventArgs e) { var context = HttpContext.Current; var exception = context.Server.GetLastError(); if (exception is HttpRequestValidationException) { Response.Clear(); Response.StatusCode = 200; Response.Write(@"<html><head></head><body>hello</body></html>"); Response.End(); return; } }

Si depuro mi aplicación web, funciona perfecto. Pero cuando lo coloco en nuestro servidor de producción, el servidor lo ignora y genera el mensaje "error request.form potencialmente detectado desde el cliente ": página de error. No sé qué sucede exactamente ... ¿Si alguien sabe cuál es el problema o qué hago mal ...?

Además, no quiero configurar validaterequest en falso en web.config.

El servidor utiliza IIS7.5, y estoy usando asp.net 3.5.

Gracias, Bruno


Otra forma que solo funciona con MVC es usando un filtro de excepciones personalizado:

  • Cree un FilterAttribute personalizado que implemente IExceptionFilter
  • desde dentro del FilterAttribute, puede redirigir al controlador o la vista que se usará para mostrar el error.
  • Registre el filtro en el Global.asax o atribuya sus controladores

Esto tiene la ventaja de que puede usar la infraestructura MVC normal (Razor) para representar la vista de error.

public class HttpRequestValidationExceptionAttribute : FilterAttribute, IExceptionFilter { public void OnException(ExceptionContext filterContext) { if (!filterContext.ExceptionHandled && filterContext.Exception is HttpRequestValidationException) { filterContext.Result = new RedirectResult("~/HttpError/HttpRequestValidationError"); filterContext.ExceptionHandled = true; } } }