2010-09-13 22 views
17

Tengo un sitio básico ASP.NET MVC2 que registra un solo error de "archivo no existe" cada vez que se carga una vista (no vistas parciales). Estoy bastante seguro de que esto se debe a que estoy haciendo referencia a un archivo, desde la página maestra, que no existe, pero no puedo determinar cuál es.Cómo resolver la excepción "El archivo no existe"?

El seguimiento de la pila no es útil (consulte a continuación). ¿Alguien tiene consejos sobre cómo depurar mejor esto?

File does not exist. : at System.Web.StaticFileHandler.GetFileInfo(String virtualPathWithPathInfo, String physicalPath, HttpResponse response) 
    at System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context) 
    at System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state) 
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
+0

¿Está Gttting un 404 para la vista que está viendo? Si es así, use el depurador de rutas de Phil Haack (http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx). Si ese no es su problema, muestre parte de su código que pueda ser relevante. –

+0

Hola Tomás, gracias por tu comentario! No, no obtengo un 404. Hay una excepción planteada (System.Web.HttpException) que es detectada por Application_Error() en mi Global.asax.cs. No hay una excepción interna. No sé de dónde se origina la excepción. Puedo publicar el código 'logging' desde Application_Error() - pero todo lo que hace es volcar el mensaje de excepción y apilar el rastreo a un archivo de texto. –

Respuesta

55

Como dices, es probable que falte un archivo o imagen a la que hace referencia tu página maestra. Para capturar el error, añada el siguiente controlador de error a su Global.asax

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError(); 

    if (ex.Message == "File does not exist.") 
    { 
     throw new Exception(string.Format("{0} {1}", ex.Message, HttpContext.Current.Request.Url.ToString()), ex); 
    } 
} 

Esto entonces debe decirle qué recurso que la página se solicita

+1

¡Gracias Clicktricity! Eso es brillantemente simple. Me hace sentir tonto por no pensar en eso :-) De todos modos, resulta que es una solicitud de favicon.ico que falla. –

+2

Estaba comprobando este problema durante toda la noche. Gracias por su ayuda, obtuve el archivo que no se encuentra: favicon.ico. Muchas gracias de nuevo. –

+0

Me encuentro con el mismo problema, hice esto y ahora estoy recibiendo: El archivo no existe. http: // localhost: 63456/ – Barka

5

O si depuración que sólo puede poner la siguiente línea en la ventana Inmediato a cheque:

? HttpContext.Current.Request.Url.ToString()

+1

Sí, eso ayudó: System.Web.HttpContext.Current.Request.Url – Jonx

2

Revise sus archivos CSS para url (resource_path) donde "resource_path" no existe.

Recibía la misma excepción. El problema encontrado estaba en el archivo CSS donde faltaba un archivo de imagen del proyecto y no en el sistema de archivos. Por ejemplo, una línea como:

background-image: url(/images/foo.png); 

archivo donde "foo.png" no está en la carpeta de imágenes.

usted puede echar la última excepción como un HttpException para obtener el código de estado HTML:

HttpException httpEx = Server.GetLastError() as HttpException; 
if(httpEx != null) 
    httpEx.GetHttpCode();   // Will be HTML status code, 404 in this case. 

pero no contienen ninguna información de archivos lo que falta. Encontré el archivo perdido al verificar cada declaración de clase de CSS en la página donde ocurría este error.

+0

El mío también era CSS. Estoy usando MVC 4 y tuve que mover mis @ Scripts.Render ... a _ViewStart.cshtml (Master Layout Page), en lugar de a _Layout.cshtml y esto resolvió mi problema. – eaglei22

0

En mi caso recibía el mismo error, aunque no encontré ningún "error 404" en la consola del navegador. Incluso revisé el archivo maestro y no pude encontrar ningún archivo perdido. Resultó que el navegador espera que favicon.ico esté en la raíz del sitio. Creé un favicon.ico en la raíz de mi sitio y el problema desapareció. Este era un buen sitio web para generar el icono: http://www.favicon.cc/

1

Agregar siguiente método en Global.asax archivo

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError(); 
    Log.Error("An error occurred", ex); 
    Log.Error("Requested url: ", Request.RawUrl); 
} 

Request.RawUrl Dar url exacta que dan un error.

En su archivo de registro que debes ver:

Requested url: /favicon.ico 
0

en mi caso se trataba de una página de inicio por defecto es decir default.aspx perdido que era el culpable.

Así que agregar el archivo default.aspx resolvió el problema.

Sin embargo, este proyecto no requiere una página predeterminada ya que no se trata de un proyecto de usuario.

Se trata más bien de una aplicación de middleware para interactuar con sistemas legados en la web.

Cuestiones relacionadas