En la aplicación, los errores del código de estado http se manejan a través de web.config.
He especificado el código de error http y la ruta respectiva para mostrar en caso de error de estado http
<customErrors mode="On" redirectMode="ResponseRewrite" /> <httpErrors existingResponse="Replace" errorMode="Custom"> <clear/> <remove statusCode="404"/> <error statusCode="404" path="Themes\Patient6\Static\404.html" responseMode="File"/> <remove statusCode="404" subStatusCode="980"/> <error statusCode="404" subStatusCode="980" path="/patient.search/search/noresults" responseMode="ExecuteURL"/> <remove statusCode="410"/> <error statusCode="410" path="Themes\Patient6\Static\410.html" responseMode="File"/> <remove statusCode="410" subStatusCode="990"/> <error statusCode="410" subStatusCode="990" path="/forums/discuss/deleted" responseMode="ExecuteURL"/> <remove statusCode="500"/> <error statusCode="500" path="Themes\Patient6\Static\500.html" responseMode="File"/> <remove statusCode="403"/> <error statusCode="403" path="Themes\Patient6\Static\403.html" responseMode="File"/> </httpErrors>El código anterior funciona bien para el código de estado dado en httperrors, pero para el otro error como 400, 502, el código no se maneja, por lo que muestra el error explícitamente.
Solución esperada:
¿Hay algún tipo de solución if-condition/Default-Path para mostrar un error personalizado para un código de estado dado y 500 para otro código de estado?
Intenté la siguiente solución:
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="/error-500" />Pero redirige a 500 para todos los códigos de estado de error que brindan información falsa para el usuario.
También probé esto:
<httpErrors existingResponse="Replace" errorMode="Custom" defaultResponseMode="File" defaultPath="Themes\Patient6\Static\500.html">Pero obteniendo el siguiente error para la línea anterior
HTTP Error 500.19 - Internal Server Error The requested page cannot be accessed because the related configuration data for the page is invalid.customErrors y httpErrors son dos cosas diferentes. Consulte aquí para obtener más información.
Su principal problema aquí es que está especificando páginas de error SOLO para esos códigos de error, y no especifica una página de error predeterminada para usar con ningún otro código de error. Como resultado, mostrará el error en lugar de una página de error personalizada.
Buscar en Google cómo hacer esto me llevó rápidamente a esta página de desbordamiento de pila , que tiene el siguiente código:
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" defaultPath="/App/Error"> <!-- Do not include ~, this was my issue all long --> <clear/> <!-- so that IIS provided error pages are skipped --> <!-- add those which you like to provide a view of yours --> <error path="/App/Http404" responseMode="ExecuteURL" statusCode="404"/> <error path="/App/Http503" responseMode="ExecuteURL" statusCode="503"/> </httpErrors> En términos de su código, este código a continuación debería funcionar, suponiendo que haya configurado una página de error predeterminada en Themes\Patient6\Static\error.html
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" defaultPath="Themes\Patient6\Static\error.html"> <!-- Do not include ~ --> <clear/> <!-- so that IIS provided error pages are skipped --> <error statusCode="404" path="Themes\Patient6\Static\404.html" responseMode="File"/> <error statusCode="404" subStatusCode="980" path="/patient.search/search/noresults" responseMode="ExecuteURL"/> <error statusCode="410" path="Themes\Patient6\Static\410.html" responseMode="File"/> <error statusCode="410" subStatusCode="990" path="/forums/discuss/deleted" responseMode="ExecuteURL"/> <error statusCode="500" path="Themes\Patient6\Static\500.html" responseMode="File"/> <error statusCode="403" path="Themes\Patient6\Static\403.html" responseMode="File"/> </httpErrors>Tampoco debería necesitar eliminar manualmente cada código de estado, borrar una vez en la parte superior debería ser suficiente.