2009-08-25 9 views
0

Ich habe eine Website, die den Benutzer nach einer Weile der Inaktivität protokolliert. Dies wird durch den folgenden Code getan:Respone.Redirect verursacht gelegentlich Fehler, aber ich kann es nicht reproduzieren

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

Aber dreimal in den letzten paar Tagen habe ich die folgende Ausnahme erhalten haben:

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) 

Auf den ersten Fehler schien offensichtlich, da logout.aspx nicht ist im Ordner "Person" enthalten, aber auf der Stammebene, aber warum passiert das nicht jedes Mal, wenn ich vom Ordner "Person" abgemeldet werde? Ich habe die gleiche Routine immer und immer wieder gemacht, aber der Fehler tritt fast nie auf.

Irgendwelche Ideen?

Antwort

1

können Sie sicherstellen, dass Sie immer den richtigen Pfad zu Ihrer Website Wurzel durch den vollständigen aufgelösten Pfad in der Seite zu schreiben wie folgt (Ihre Logout-Seite unter der Annahme, im Stammordner):

window.location = '<%= ResolveUrl("~/logout.aspx?timeout=true")%>'; 

wenn Ihre Logout-Seite nicht im Stammordner ist, gehen Sie wie folgt vor:

window.location = '<%= ResolveUrl("~/Pathtoyourpage/logout.aspx?timeout=true")%>'; 

diese Weise wird die Umleitung funktioniert auch, wenn Sie Ihre Entwicklungs- und Produktionswege unterschiedlich sind.

Hoffe, das hilft.

+0

Ja, diese Methode ist definitiv zuverlässiger als statische URLs. – Kezzer

2

Ihr Code wie folgt ändern:

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

Durch das Entfernen '' Von der URL aus gehen Sie immer zum Stamm der Site.

EDIT:
Wie in den Kommentaren angegeben Erikric an der Wurzel des virtuellen Ordner ‚NIR310‘ gehen will.

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

Er benutzt die. ein Verzeichnis hoch zu gehen, nicht wahr? Also würde er sicher '/ NIR310/Person/logout.aspx? Timeout = true? – Kezzer

+0

Wenn er ein Verzeichnis hochgehen will, sollte er nicht benutzen .. dann? Aber in seiner Frage gibt er an, dass sich die logout.aspx-Datei auf der Stammebene befindet. – RuudKok

+0

Sorry, ich war hier etwas unklar. Mit root meinte ich im root-Ordner des virtuellen Verzeichnisses. Der Vorschlag hier hat nicht funktioniert, da es mich zu serverName/logout.aspx führte – erikric

Verwandte Themen