Response.Redirect causa de errores de vez en cuando, pero no podrá reproducirla
-
19-09-2019 - |
Pregunta
Tengo un sitio web que el usuario ingrese a cabo después de un tiempo de inactividad. Esto se hace mediante el código siguiente:
window.location = "./logout.aspx?timeout=true";
Sin embargo, tres veces en el último par de días he recibido la siguiente excepción:
System.Web.HttpException
The file '/NIR310/Person/logout.aspx' does not exist.
at System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath)
at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
at System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)
at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
En un primer momento el error parecía obvio ya logout.aspx no está contenido en la carpeta "Persona", pero a nivel de la raíz, pero ¿por qué no se suceden cada vez que mi sesión de usuario desde la carpeta "persona"? Yo he hecho la misma rutina una y otra vez, pero el error no ocurre casi nunca.
¿Alguna idea?
Solución
Puede asegurarse de que siempre tiene la ruta correcta a raíz de su sitio escribiendo la ruta completa resuelto en la página de la siguiente manera (asumiendo que su página de salida se encuentra en la carpeta raíz):
window.location = '<%= ResolveUrl("~/logout.aspx?timeout=true")%>';
Si la página de cierre de sesión no está en la carpeta raíz, haga lo siguiente:
window.location = '<%= ResolveUrl("~/Pathtoyourpage/logout.aspx?timeout=true")%>';
De esta manera la redirección funcionará incluso si sus caminos de desarrollo y producción son diferentes.
Espero que esto ayude.
Otros consejos
Cambiar su código a la siguiente:
window.location = "/logout.aspx?timeout=true";
Al eliminar la ''. desde la URL que siempre va a la raíz del sitio.
EDIT:
Como se ha dicho en los comentarios Erikric quiere ir a la raíz de la carpeta virtual 'NIR310'.
window.location = "/NIR310/logout.aspx?timeout=true";