Response.Redirect provoque une erreur de temps en temps, mais je ne peux pas reproduire
-
19-09-2019 - |
Question
J'ai un site Web qui se connectera à l'utilisateur après un certain temps d'inactivité. Cela se fait par le code suivant:
window.location = "./logout.aspx?timeout=true";
Mais trois fois dans les deux dernières jours, j'ai reçu l'exception suivante:
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)
Tout d'abord l'erreur semblait évidente depuis logout.aspx ne figure pas dans le dossier « Personne », mais au niveau de la racine, mais pourquoi ne pas se produire à chaque fois que je suis déconnecté du dossier « personne »? Je l'ai fait la même routine, encore et encore, mais l'erreur se produit presque jamais.
Toutes les idées?
La solution
Vous pouvez vous assurer que vous avez toujours le bon chemin à la racine de votre site en écrivant le chemin complet résolu dans la page comme suit (en supposant que votre page est dans le déconnecter dossier racine):
window.location = '<%= ResolveUrl("~/logout.aspx?timeout=true")%>';
Si votre page est pas dans la déconnexion du dossier racine, procédez comme suit:
window.location = '<%= ResolveUrl("~/Pathtoyourpage/logout.aspx?timeout=true")%>';
De cette façon, la redirection fonctionnera même si vos voies de développement et de production sont différents.
Hope this helps.
Autres conseils
Modifiez votre code à ce qui suit:
window.location = "/logout.aspx?timeout=true";
En supprimant le '' à partir de l'URL que vous allez toujours à la racine du site.
EDIT: Comme il est indiqué dans les commentaires Erikric veut aller à la racine du dossier virtuel « NIR310 ».
window.location = "/NIR310/logout.aspx?timeout=true";