Pergunta

Eu tenho um site que irá registrar o usuário para fora depois de um tempo de inatividade. Isso é feito pelo código a seguir:

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

Mas três vezes no último par de dias que recebi a seguinte exceção:

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)

No início, o erro parecia óbvio desde logout.aspx não está contido na pasta "Pessoa", mas no nível de raiz, mas por que isso não acontece toda vez que entro fora da pasta "Pessoa"? Eu tenho feito a mesma rotina uma e outra vez, mas o erro quase nunca ocorre.

Todas as idéias?

Foi útil?

Solução

Você pode ter certeza que você sempre tem o caminho correcto para a raiz do seu site, escrevendo o caminho resolvido completa na página da seguinte forma (assumindo sua página de logout é na pasta raiz):

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

Se a sua página de logout não é na pasta raiz, faça o seguinte:

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

Desta forma, o redirecionamento funcionará mesmo se o seu desenvolvimento e produção caminhos são diferentes.

Espero que isso ajude.

Outras dicas

Alterar o código para o seguinte:

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

Ao remover o '. a partir do URL que você está sempre indo para a raiz do site.

EDIT:
Como afirmado nos comentários Erikric quer ir para a raiz da pasta virtual 'NIR310'.

window.location = "/NIR310/logout.aspx?timeout=true";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top