tutorial sintaxis que mvc español c# asp.net rest ihttphandler

c# - sintaxis - ¿Cómo enviar un código de estado 500 en ASP.Net y aún escribir en la respuesta?



razor mvc (3)

Es posible que desee establecer una página CustomErrors (configurable a través de web.config). Puede almacenar su contenido entre las solicitudes de la Sesión (o mediante un mecanismo alternativo) y luego tener asp.net configurado para mostrar la página de error personalizada que a su vez muestra su salida personalizada.

Sin embargo, una palabra de advertencia: si el 500 está siendo causado por un problema fundamental con la aplicación (es decir, StackOverflowException) e intenta mostrar una página que depende de asp.net (es decir, MyCustomErrors.aspx), puede terminar en un bucle.

Para obtener más información, consulte esta página .

Tengo un servicio web ASP.Net de archivo único (un archivo .ashx que contiene una implementación IHttpHandler ) que necesita para poder devolver los errores como respuestas con códigos de estado de 500 Internal Server Error . Esto es algo relativamente sencillo de hacer en PHP:

header("HTTP/1.1 500 Internal Server Error"); header("Content-Type: text/plain"); echo "Unable to connect to database on $dbHost";

El equivalente de ASP.Net (C #) debería ser:

Context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; Context.Response.ContentType = "text/plain"; Context.Response.Write("Unable to connect to database on " + dbHost);

Por supuesto, esto no funciona como se esperaba; en cambio, IIS intercepta el código de estado 500, transfiere todo lo que he escrito al objeto Response y envía información de depuración o una página de error personalizada, según cómo esté configurada la aplicación.

Mi pregunta: ¿cómo puedo suprimir este comportamiento de IIS y enviar información de error directamente desde la implementación de IHttpHandler ?

Esta aplicación es un puerto de PHP; el lado del cliente ya está escrito, así que estoy esencialmente atascado con esta especificación. Enviar errores con un código de estado 200 lamentablemente no se ajusta al molde.

Idealmente, necesito controlar el comportamiento mediante programación, porque esto es parte de un SDK que queremos distribuir sin ninguna instrucción suplementaria de " editar este archivo " y " cambiar esta configuración de IIS ".

¡Gracias!

Editar : ordenado Context.Response.TrySkipIisCustomErrors = true era el ticket. Guau.


He utilizado lo siguiente en el pasado y he podido arrojar un error 503 con un mensaje personalizado usando el código que se muestra a continuación en el método Page_Load. Uso esta página detrás de un equilibrador de carga como la página de ping para que el equilibrador de carga sepa si un servidor está en servicio o no.

Espero que esto ayude.

protected void Page_Load(object sender, System.EventArgs e) { if (Common.CheckDatabaseConnection()) { this.LiteralMachineName.Text = Environment.MachineName; } else { Response.ClearHeaders(); Response.ClearContent(); Response.Status = "503 ServiceUnavailable"; Response.StatusCode = 503; Response.StatusDescription= "An error has occurred"; Response.Flush(); throw new HttpException(503,string.Format("An internal error occurred in the Application on {0}",Environment.MachineName)); } }


Context.Response.TrySkipIisCustomErrors = true