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;
}
}
}