2011-10-04 15 views
5

Hola, estoy intentando hacer una redirección si la respuesta es un 404 pero no funciona como se esperaba, ¿pueden los expertos ver el problema ?. Todavía va a la genérica 404404 Redirección personalizada

en mi Global.asax

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
     if (Response.Status == "404 Not Found") 
     { 
      string notFound = "~/custom_notfound.aspx"; 
      Response.Redirect(notFound); 
     } 

} 

ACTUALIZACIÓN

probado hasta ahora

(Response.Status == "404 Not Found") 
(Response.Status == "404") 
(Response.StatusCode == 404) 
+0

Quizás quiso decir poner 'Response.Redirect (NOTFOUND);'? – Icarus

+0

¿Qué es PageNotFound? –

+0

ahh disculpa el error al publicar pero todavía tiene el problema. Gracias – user710502

Respuesta

8

También puede utilizar el web.config customErrors sección - as shown here

por ejemplo En la sección system.web,

<customErrors mode="On" defaultRedirect="/custom_error.aspx"> 
    <error statusCode="404" redirect="/custom_notfound.aspx" /> 
</customErrors> 
2

Se podría añadir a su web.config para hacer esta redirección, no es necesario utilizar Application_BeginRequest para manejar esto.

Ver esto ServerFault question.

Si no puede usar el archivo web.config, establecería su página de inicio en una que no existe, ponga un punto de interrupción en BeginRequest, depure la aplicación y mire la solicitud para ver cómo determinarla es un 404. Eso sería mucho más fácil de determinar la solución óptima.

Al examinar esto un poco más, hay un HttpStatusCode que se utiliza en la clase HttpWebResponse. Por lo tanto, puede tener sentido utilizar una anulación diferente de la Aplicación para obtener la respuesta predeterminada, y luego verificar su estado contra el Enum.

+0

En cualquier caso, por alguna razón, quieren que se haga en el asax, ¿cuál sería la forma de hacerlo allí? – user710502

3

No creo que BeginRequest pueda saber acerca de los errores 404. Intenta implementar Application_Error en su lugar. Compruebe si Server.GetLastError() es una HttpException y, de ser así, verifique el estado.

0

También puede utilizar el web.config

<system.webServer> 
    <httpErrors errorMode="Custom" defaultResponseMode="File" > 
    <remove statusCode="404" /> 
    <remove statusCode="500" /> 
    <error statusCode="404" path="404.html" /> 
    <error statusCode="500" path="500.html" /> 
    </httpErrors> 
</system.webServer> 
Cuestiones relacionadas