Tengo un servicio web ASP.Net de archivo único (un archivo .ashx
que contiene una implementación IHttpHandler
) que necesita poder devolver errores como respuestas con 500 Internal Server Error códigos de estado. Esto es algo relativamente sencillo de hacer en PHP:¿Cómo enviar un código de estado 500 en ASP.Net y todavía escribir en la respuesta?
header("HTTP/1.1 500 Internal Server Error");
header("Content-Type: text/plain");
echo "Unable to connect to database on $dbHost";
El ASP.Net (C#) se deberá:
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 su lugar, 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 IIS y enviar información de error directamente desde mi implementación 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, me necesidad de controlar el comportamiento mediante programación, ya que esto es parte de un SDK que queremos distribuir sin ninguna "editar este archivo" y "cambiar esta configuración de IIS" instrucciones complementarias.
Gracias!
Editar: Ordenado. fue el boleto. Guau.
Si es posible me gustaría evitar dar información interna, como la ubicación de base de datos en un sitio de producción - los hackers les encanta recibir estas cosas, hace que sus ataques mucho más fácil. – devstuff
Buen punto, pero este es un servicio web seguro, no un sitio web. La conexión a la base de datos ni siquiera se ha intentado sin una autenticación HTTP previamente exitosa :) –