Server.MapPath(“.”), Server.MapPath(“~”), Server.MapPath(@“\”), Server.MapPath(“/”). What is the difference?

后端 未结 3 462
谎友^
谎友^ 2020-11-21 23:59

Can anyone explain the difference between Server.MapPath(\".\"), Server.MapPath(\"~\"), Server.MapPath(@\"\\\") and Server.MapPa

3条回答
  •  悲哀的现实
    2020-11-22 00:26

    Server.MapPath specifies the relative or virtual path to map to a physical directory.

    • Server.MapPath(".")1 returns the current physical directory of the file (e.g. aspx) being executed
    • Server.MapPath("..") returns the parent directory
    • Server.MapPath("~") returns the physical path to the root of the application
    • Server.MapPath("/") returns the physical path to the root of the domain name (is not necessarily the same as the root of the application)

    An example:

    Let's say you pointed a web site application (http://www.example.com/) to

    C:\Inetpub\wwwroot
    

    and installed your shop application (sub web as virtual directory in IIS, marked as application) in

    D:\WebApps\shop
    

    For example, if you call Server.MapPath() in following request:

    http://www.example.com/shop/products/GetProduct.aspx?id=2342
    

    then:

    • Server.MapPath(".")1 returns D:\WebApps\shop\products
    • Server.MapPath("..") returns D:\WebApps\shop
    • Server.MapPath("~") returns D:\WebApps\shop
    • Server.MapPath("/") returns C:\Inetpub\wwwroot
    • Server.MapPath("/shop") returns D:\WebApps\shop

    If Path starts with either a forward slash (/) or backward slash (\), the MapPath() returns a path as if Path was a full, virtual path.

    If Path doesn't start with a slash, the MapPath() returns a path relative to the directory of the request being processed.

    Note: in C#, @ is the verbatim literal string operator meaning that the string should be used "as is" and not be processed for escape sequences.

    Footnotes

    1. Server.MapPath(null) and Server.MapPath("") will produce this effect too.

提交回复
热议问题