2010-10-14 12 views
8

En mi archivo de manejo de excepciones, establezco un código de estado en 404 y luego renderizo n página HTML, para la página de error (piense en fail-whale).IIS7 piratea mi error de Coldfusion Página

<cfheader statuscode="404" statustext="Application Exception"> 

<html><head><title>Error</title></head><body><h1>There was an error yo!</h1></body></html> 

Esto es, obviamente, demasiado simplificado, pero solo para asegurarse de que todo se haya demostrado.

Lo que he encontrado es que desde una solicitud ASP.NET, pueden establecer una variable "Response.TrySkipIisCustomErrors = true" para evitar que IIS muestre su propia página de error.

¿Cómo puede alguien en Coldfusion hacerlo/cómo puedo decirle a IIS que deje de pensar que sabe mejor que mí chanchullos.

Respuesta

21

Esto podría ayudar:

<configuration> 
    <system.webServer> 
    <httpErrors existingResponse="PassThrough" /> 
    </system.webServer> 
</configuration> 

Para más información:

HTTP Errors (IIS.NET)
What to expect from IIS7 custom error module (IIS.NET)

Si eso no funciona, entonces es posible que trate de escribir un .NET HttpModule para conectarse a la canalización de solicitud/respuesta de IIS para establecer Response.TrySkipCustomErrors. No es ideal.

El objeto de solicitud de trabajo de ASP.NET llama a una función exportada llamada MgdSetStatusW. El problema aquí es que a menos que Coldfusion exponga esta bandera, entonces no podrá establecer el valor directamente en CF.

hurgando con .NET Reflector he visto a establecer el estado de respuesta ASP.NET usando:

[DllImport("webengine4.dll", CharSet=CharSet.Unicode)] 
internal static extern int MgdSetStatusW(IntPtr pRequestContext, 
    int dwStatusCode, int dwSubStatusCode, string pszReason, 
    string pszErrorDescription, bool fTrySkipCustomErrors); 
+0

El método web.config tipo de trabajado, pero todavía antepone una ridícula "La página no se puede mostrar porque una error interno del servidor ha ocurrido ". bloque de texto antes de que muestre mi plantilla. No sé si escribiré algo para .NET ya que eso sería demasiado estúpido como para tener que hacerlo. Esta solución debe ser modular, de modo que si el sitio se copia a cualquier servidor, ya sea Apache/IIS6/IIS7, todo funciona. –

+0

@Tyler: probablemente algo que plantear con Adobe, aunque ese proceso sea doloroso. – Kev

+0

Espera, no importa, me equivoqué, estaba usando el modo de error en lugar de la respuesta existente. Funciona muy bien ahora, gracias. –

Cuestiones relacionadas