[置顶] "无法使用前导 .. 在顶级目录上退出" 错误分析以及解决方案

错误示例如下


“/”应用程序中的服务器错误。
无法使用前导 .. 在顶级目录上退出。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Web.HttpException: 无法使用前导 .. 在顶级目录上退出。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[HttpException (0x80004005): 无法使用前导 .. 在顶级目录上退出。]
   System.Web.Util.UrlPath.ReduceVirtualPath(String path) +8878167
   System.Web.Util.UrlPath.Reduce(String path) +52
   System.Web.Util.UrlPath.Combine(String appPath, String basepath, String relative) +214
   System.Web.UI.Control.ResolveClientUrl(String relativeUrl) +180
   System.Web.UI.HtmlControls.HtmlLink.RenderAttributes(HtmlTextWriter writer) +74
   System.Web.UI.HtmlControls.HtmlLink.Render(HtmlTextWriter writer) +42
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25

显而易见,这是在执行页面之前呢就重写url了,所以就会出现这样的情况:

原因一:出现这样的情况一般是有这样的函数在做鬼:

        protected void Page_Init(object sender, EventArgs e)
        {
            if (!ValidatePermission())
            {

                //PageUtil.ParentPageRedirect(this, "/default.aspx");
                //Response.End();
                return;
            }
        }
        /// <summary>
        /// 权限控制
        /// </summary>
        /// <returns></returns>
        protected bool ValidatePermission()
        {
            if (string.IsNullOrEmpty(MyUID))
                return false;
            else
                return true;
        }

这样,如果你不登录,就不会让你进入页面,这是因为继承了牧歌类的原因,如果你要查看的话,最好登录之后再查看,如果你非要不登录查看 的话,那你把他注释了,就ok


原因二:移动了目标文件到了别的地方,例如 原来的路径是这样,“../Admin/...”  移动之后变成了这样 “../Account/..” 这当然就会不对了,所以你要在移动文件之后,然后把路径都改过来,就没有问题了

posted @ 2013-05-12 10:26  shouqiang Wei  阅读(1196)  评论(0编辑  收藏  举报