Server.MapPath()方法在项目发布到IIS后出现异常

maniacstone 2011-12-01 03:58:33
解决方案中有两个项目:
web项目A,类库B。
项目A中有测试页面 TestWeb.aspx.cs
类库中有TestClass.cs
代码如下:



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方法
调用代码如下:


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

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


...全文
172 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2011-12-01
  • 打赏
  • 举报
回复
路径出现异常!异常路径为:
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>"); }
lendylixt 2011-12-01
  • 打赏
  • 举报
回复
mappath取的是相对路径,把~去掉,改成相对当前文件的文件路径试试
上一级用 ../文件 当前路径用 ./文件 下一级用 ./路径/文件
maniacstone 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 z_f_p 的回复:]
这个还真没遇到过,关注!
[/Quote]

谢谢帮顶。
等各位指点。
z_f_p 2011-12-01
  • 打赏
  • 举报
回复
这个还真没遇到过,关注!
maniacstone 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qianjin036a 的回复:]
D:盘不在你的 IIS 虚拟路径上吧.
[/Quote]

我项目是在本机的D盘,上面显示的那个目录里。
但是服务器上的路径,是 C:\A\Bin 只是没有这个分隔符
-晴天 2011-12-01
  • 打赏
  • 举报
回复
D:盘不在你的 IIS 虚拟路径上吧.

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧