2009-08-25 2 views
0

У меня есть веб-сайт, на котором пользователь может выйти из системы через некоторое время бездействия. Это делается с помощью следующего кода:Respone.Redirect вызывает ошибку время от времени, но я не могу воспроизвести его

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

Но три раза в последние пару дней я получил следующее исключение:

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) 

В первой ошибки казалось очевидным, поскольку logout.aspx не содержится в папке «Человек», но на уровне корня, но почему это не происходит каждый раз, когда я выхожу из папки «Личность»? Я повторял ту же процедуру снова и снова, но ошибки почти никогда не происходит.

Любые идеи?

ответ

1

Вы можете убедиться, что у вас всегда есть правильный путь к корневой каталог своего сайта, написав полный вычисленный путь к странице следующим образом (предполагается, что страницы выхода из системы находится в корневой папке):

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

Если страница выхода из системы не находится в корневой папке, выполните следующие действия:

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

Этот путь редирект будет работать, даже если ваши разработки и производства пути различны.

Надеюсь, это поможет.

+0

Yup, этот метод определенно более надежный, чем использование статических URL-адресов. – Kezzer

2

Изменить код к следующему:

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

Удалив '' из URL-адреса, который вы всегда используете для корня сайта.

EDIT:
Как указано в комментариях Erikric хочет перейти в корень виртуальной папки «NIR310».

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

Он использует. идти вверх по каталогу, не так ли? Неужели он захочет «/NIR310/Person/logout.aspx? Timeout = true»? – Kezzer

+0

Если он хочет пойти в каталог, не должен ли он использовать ... тогда? Но в своем вопросе он утверждает, что файл logout.aspx находится на корневом уровне. – RuudKok

+0

Прошу прощения, я был здесь немного неясен. В корневой папке я имел в виду корневую папку виртуального каталога. Предложение здесь не сработало, так как оно взяло меня на serverName/logout.aspx – erikric