Response.Redirect provoca l'errore una volta ogni tanto, ma non posso riprodurlo
-
19-09-2019 - |
Domanda
Ho un sito web che scollegare l'utente dopo un po 'di inattività. Questo viene fatto il seguente codice:
window.location = "./logout.aspx?timeout=true";
Ma tre volte nell'ultimo paio di giorni ho ricevuto la seguente eccezione:
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)
In un primo momento l'errore sembrava ovvio dal momento logout.aspx non è contenuto nella cartella "Persona", ma al livello principale, ma perché non accade ogni volta che vengo disconnesso fuori dalla cartella "persona"? Ho fatto la stessa routine più e più volte, ma l'errore si verifica quasi mai.
Tutte le idee?
Soluzione
Si può fare in modo di avere sempre il percorso corretto per principale del sito, scrivendo il percorso completo risolto nella pagina come segue (supponendo che il pagina di logout si trova nella cartella root):
window.location = '<%= ResolveUrl("~/logout.aspx?timeout=true")%>';
Se la pagina di logout non si trova nella cartella principale, effettuare le seguenti operazioni:
window.location = '<%= ResolveUrl("~/Pathtoyourpage/logout.aspx?timeout=true")%>';
In questo modo il reindirizzamento funziona anche se i percorsi di sviluppo e di produzione sono diversi.
Spero che questo aiuti.
Altri suggerimenti
modificare il codice per il seguente:
window.location = "/logout.aspx?timeout=true";
Per la rimozione del '' dall'URL si sta andando sempre per la radice del sito.
Modifica
Come indicato nei commenti Erikric vuole andare alla radice della cartella virtuale 'NIR310'.
window.location = "/NIR310/logout.aspx?timeout=true";