Response.Redirect的错误引起过一段时间,但我不能重现
-
19-09-2019 - |
题
我有一个网站,将注销用户一段时间不活动后。这通过下面的代码来完成:
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没有在“个人”文件夹中包含的,但在根级别似乎是显而易见的错误,但为什么没有发生一次,当我从“人”的文件夹退出时间?我一直在做同样的例行一遍又一遍,但这个错误几乎从未发生。
任何想法?
解决方案
您可以确保您始终写完整的解决路径进入页面如下(假设你的注销页面是在根文件夹)有正确的路径到你的网站的根目录:
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";
不隶属于 StackOverflow