2009-08-25 10 views
0

J'ai un site Web qui déconnectera l'utilisateur après un moment d'inactivité. Cela se fait par le code suivant:Respone.Redirect provoque une erreur de temps en temps, mais je ne peux pas le reproduire

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) 

Au début, l'erreur semblait évidente depuis logout.aspx n'est pas contenu dans le dossier "Person", mais au niveau de la racine, mais pourquoi cela n'arrive-t-il pas chaque fois que je suis déconnecté du dossier "Person"? J'ai fait la même routine encore et encore, mais l'erreur ne se produit presque jamais.

Des idées?

Répondre

1

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 de déconnexion se trouve dans le 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.

Espérons que cela aide.

+0

Oui, cette méthode est définitivement plus fiable que l'utilisation d'URL statiques. – Kezzer

2

Changer votre code à ce qui suit:

window.location = "/logout.aspx?timeout=true"; 

En supprimant le '' à partir de l'URL, vous allez toujours à la racine du site.

EDIT:
Comme indiqué dans les commentaires Erikric veut aller à la racine du dossier virtuel « NIR310 ».

window.location = "/NIR310/logout.aspx?timeout=true"; 
+0

Il utilise le. monter un répertoire, n'est-ce pas? Donc, il voudrait sûrement '/NIR310/Person/logout.aspx? Timeout = true'? – Kezzer

+0

S'il veut monter un répertoire, ne devrait-il pas utiliser .. alors? Mais dans sa question, il déclare que le fichier logout.aspx est situé au niveau de la racine. – RuudKok

+0

Désolé, j'étais un peu flou ici. Par racine, je voulais dire dans le dossier racine du répertoire virtuel. La suggestion ici n'a pas fonctionné, puisqu'il m'a fallu à serverName/logout.aspx – erikric