谁能解释一下Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\")和Server.MapPath("/")之间的区别?
当前回答
1) Server.MapPath(".")——返回正在执行的文件(例如aspx)的“当前物理目录”。
例:假设D:\WebApplications\Collage\Departments
2) Server.MapPath("..")——返回"父目录"
例D: \ WebApplications \拼贴
3) Server.MapPath("~")——返回“应用程序根的物理路径”
例D: \ WebApplications \拼贴
4) Server.MapPath("/")——返回域名根目录的物理路径
例C: \ Inetpub \ wwwroot
其他回答
服务器。MapPath指定映射到物理目录的相对路径或虚拟路径。
Server.MapPath(".")1返回正在执行的文件(例如aspx)的当前物理目录 Server.MapPath("..")返回父目录 mappath("~")返回应用程序根的物理路径 Server.MapPath("/")返回域名根的物理路径(不一定与应用程序的根相同)
一个例子:
假设您将一个网站应用程序(http://www.example.com/)指向
C:\Inetpub\wwwroot
并安装了您的商店应用程序(子web作为IIS中的虚拟目录,标记为应用程序)
D:\WebApps\shop
例如,如果你在以下请求中调用Server.MapPath():
http://www.example.com/shop/products/GetProduct.aspx?id=2342
然后:
Server.MapPath(".")1返回D:\WebApps\shop\products Server.MapPath("..")返回D:\WebApps\shop Server.MapPath("~")返回D:\WebApps\shop Server.MapPath("/")返回C:\Inetpub\wwwroot Server.MapPath("/shop")返回D:\WebApps\shop
如果Path以正斜杠(/)或反斜杠(\)开头,MapPath()将返回一个路径,就像Path是一个完整的虚拟路径一样。
如果Path不是以斜杠开头,MapPath()将返回一个相对于正在处理的请求目录的路径。
注意:在c#中,@是逐字面值的字符串操作符,这意味着字符串应该“按原样”使用,而不是用于转义序列。
脚注
Server.MapPath(null)和Server.MapPath("")也会产生这种效果。
再进一步扩展一下@splattne的回答:
MapPath(string virtualPath)调用以下函数:
public string MapPath(string virtualPath)
{
return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}
MapPath(VirtualPath VirtualPath)依次调用MapPath(VirtualPath VirtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping),其中包含以下内容:
//...
if (virtualPath == null)
{
virtualPath = VirtualPath.Create(".");
}
//...
因此,如果调用MapPath(null)或MapPath(""),则实际上是在调用MapPath(".")
1) Server.MapPath(".")——返回正在执行的文件(例如aspx)的“当前物理目录”。
例:假设D:\WebApplications\Collage\Departments
2) Server.MapPath("..")——返回"父目录"
例D: \ WebApplications \拼贴
3) Server.MapPath("~")——返回“应用程序根的物理路径”
例D: \ WebApplications \拼贴
4) Server.MapPath("/")——返回域名根目录的物理路径
例C: \ Inetpub \ wwwroot
推荐文章
- 拒绝访问该路径
- Visual Studio - Resx文件默认“内部”为“公共”
- 用c#解析JSON
- ASP是什么?NET Identity的IUserSecurityStampStore<TUser>接口?
- ASP。网网络。config: configSource vs.文件属性
- 操作系统。makdirs在我的路径上不理解“~”
- 在Linq中转换int到字符串到实体的问题
- <system. >之间的差异。web>和<system.webServer>?
- 为什么ASP。NET web表单需要Runat="Server"属性吗?
- 使用不同的Web。在开发和生产环境中进行配置
- Linux删除大小为0的文件
- 我如何添加双引号的字符串,是在一个变量?
- 最好的方法在asp.net强制https为整个网站?
- 在ASP .NET身份声明是什么
- 从URI获取真实路径,Android奇巧新的存储访问框架