문제

잠시 동안 비활성화 된 후 사용자를 로그 아웃하는 웹 사이트가 있습니다. 이것은 다음 코드로 수행됩니다.

 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가 "Person"폴더에 포함되어 있지 않지만 루트 레벨에 포함되어 있기 때문에 처음에는 오류가 명백해 보였지만 "Person"폴더에서 로그 아웃 할 때마다 발생하지 않습니까? 나는 같은 루틴을 계속해서 반복해서했지만 오류는 거의 일어나지 않습니다.

어떤 아이디어?

도움이 되었습니까?

해결책

다음과 같이 페이지에 전체 해결 된 경로를 작성하여 항상 사이트 루트에 대한 올바른 경로를 갖도록 할 수 있습니다 (로그 아웃 페이지가 루트 폴더에 있다고 가정).

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

로그 아웃 페이지가 루트 폴더에없는 경우 다음을 수행하십시오.

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

이렇게하면 개발 및 생산 경로가 다르더라도 리디렉션이 작동합니다.

도움이 되었기를 바랍니다.

다른 팁

코드를 다음으로 변경하십시오.

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

'.'를 제거함으로써 URL에서 항상 사이트의 루트로 가고 있습니다.

편집하다:
주석에 언급 된 바와 같이 Erikric은 가상 폴더 'NIR310'의 루트로 이동하기를 원합니다.

window.location = "/NIR310/logout.aspx?timeout=true";
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top