0

しばらく操作がないとユーザーをログアウトするWebサイトがあります。これは、次のコードによって実行されます。

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

しかし、過去2日間に3回、次の例外が発生しました。

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」フォルダーからログアウトするたびにエラーが発生しないのはなぜですか。同じルーチンを何度も繰り返しましたが、エラーが発生することはほとんどありません。

何か案は?

4

2 に答える 2

2

コードを次のように変更します。

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

「。」を削除することによって URL から、常にサイトのルートにアクセスします。

編集:
コメントで述べたように、Erikric は仮想フォルダー 'NIR310' のルートに移動したいと考えています。

window.location = "/NIR310/logout.aspx?timeout=true";
于 2009-08-25T08:12:58.020 に答える
1

次のように完全な解決パスをページに書き込むことで、サイトのルートへの正しいパスを常に確保できます (ログアウト ページがルート フォルダーにあると仮定します)。

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

ログアウト ページがルート フォルダーにない場合は、次の手順を実行します。

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

これにより、開発パスと本番パスが異なる場合でもリダイレクトが機能します。

お役に立てれば。

于 2009-08-25T08:23:54.240 に答える