日期:2014-05-20  浏览次数:20457 次

Server.MapPath()方法在项目发布到IIS后出现异常
解决方案中有两个项目:
web项目A,类库B。
项目A中有测试页面 TestWeb.aspx.cs 
类库中有TestClass.cs 
代码如下:

C# code


public class TestClass
{
   string path = HttpContext.Current.Server.MapPath(@"~/Bin")+@"\"; 
   public string Test()
   {
       if(!path.Contains(@"/") && !path.Contains(@"\") )
       {
           throw new Exception("路径出现异常!异常路径为:"+path);
        }
   }
}






TestWeb.aspx.cs 中调用TestClass 类的Test方法
调用代码如下:
C# code


try
{
   TestClass _tc = new TestClass ();
   _tc.Test();
}catch(Exception e)
{
   Page.ClientScript.RegisterStartupScript(this.GetType(), "loadactive", "<script>alert('" + ex.Message + "');</script>");
}



在VS中和发布到本机IIS中,正常。
其中VS中 调试,看到path的内容为 d:\\...\\...\\...\\TestWeb\\Bin
发布到服务器上后,有内容弹出:

路径出现异常!异常路径为:
C:ABin

注意:这里不是我写错了,弹出的路径中 确实没有 \ 或者 / 符号
发布后的虚拟目录名称为A,我疑惑的是,为何路径不是 C:\A\Bin 或者C:\\A\\Bin 

请高手指点原因,在线等。




------解决方案--------------------
D:盘不在你的 IIS 虚拟路径上吧.
------解决方案--------------------
这个还真没遇到过,关注!
------解决方案--------------------
mappath取的是相对路径,把~去掉,改成相对当前文件的文件路径试试
上一级用 ../文件 当前路径用 ./文件 下一级用 ./路径/文件
------解决方案--------------------
路径出现异常!异常路径为:
C:ABin
出现这样的问题是因为js的问题。

Page.ClientScript.RegisterStartupScript(this.GetType(), "loadactive", "<script>alert('" + ex.Message + "');</script>"); }


这样写错误的。因为c#.js中都是2个\\代表一个\的。
所以你需要

Page.ClientScript.RegisterStartupScript(this.GetType(), "loadactive", "<script>alert('" + ex.Message.Replace("\\","\\\\").Replace("'","\\'") + "');</script>"); }