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>"); }