zoukankan      html  css  js  c++  java
  • ASP.NET中的路径(path) 详解

    一 ASP.NET常用路径(path)获取方法与格式对照表

      假设我们的网址为http://localhost:1897/ News/Press/Content.aspx?id=1019

     Browser Request 的网址相关的属性与方法

    输出(output)实例

    备        

    Request.ApplicationPath 

    指的是当前的application(应用程序)的目录

    Request.PhysicalPath 

    D:ProjectsSolutionwebNewsPressContent.aspx

    磁盘驱动器代号:父目录子目录Content.aspx

    Request.PhysicalApplicationPath 

    D:ProjectsSolutionweb

    磁盘驱动器代号:父目录子目录 

    Request.CurrentExecutionFilePath 

    /News/Press/Content.aspx

    Request.FilePath

    /News/Press/Content.aspx

    对应于iis的虚拟目录。

    Request.Path 

    /News/Press/Content.aspx

    当前请求的虚拟路径。Path 是 FilePath 和 PathInfo 尾部的串联。*(见下面详细讲解)

    Server.MapPath(string url)

    例http://www.example.com/1/index.html, 假设你的应用程序在c:/iis/MySite中,那么就是c:/iis/MySite/1/index.html

    将url映射为服务器上的物理路径 
     

    Request.RawUrl 

    /News/Press/Content.aspx?id=1019

    Request.Url.AbsolutePath 

    /News/Press /Content.aspx 

    Request.Url.AbsoluteUri 

    http://localhost:1897/Content.aspx?id=1019

    Request.Url.LocalPath 

    /News/Press//Content.aspx 

    Request.Url.PathAndQuery 

    /News/Press//Content.aspx?id=1019&uu=77 

    Request.Url.Scheme 

    http

    Request.Url.Host 

    localhost 

    Request.Url.Port 

    1987

    Request.Url.Authority 

    localhost:1897 

    Request.Url.Query 

    ?id=1019 

    Request.Url.Query[id] 

    1019 

    Request.Url.Fragments

    /
    News/
    Press/
    Content.aspx

     

    Request.Url.Segments[0] 

     

    System.IO.Path.GetDirectoryName(Request.PhysicalPath) 

    D:ProjectsSolutionwebNewsPress 

    磁盘驱动器代号:父目录子目录 

     

    System.IO.Path.GetFileName(Request.PhysicalPath)

    Content.aspx 

    (接上面*) Request.FilePath, Request.PathInfo, Request.Path, RequestRawUrl

     

      如果请求的地址为http://www.cnblogs.com/default.aspx/books则

    Request.FilePath值为http://www.cnblogs.com/default.aspx

    Request.PathInfo 值为 /books

    Request.Path 值为 http://www.cnblogs.com/default.aspx/books

    Request.RawUrl 值为 http://www.cnblogs.com/default.aspx/books

      如果请求地址为http://www.cnblogs.com/defaut.aspx?id=1&name=kk则

    Request.FilePath值为http://www.cnblogs.com/default.aspx

    Request.PathInfo 值为 ""(空字符串)

    Request.Path 值为 http://www.cnblogs.com/default.aspx

    Request.RawUrl 值为 http://www.cnblogs.com/default.aspx?id=1&name=kk

      二 Request.ServerVariables集合中获取到的相关信息:

     
      左列是服务器变量名,右侧是值,值是通过Request.ServerVariables[服务器变量名]获取的
    APPL_MD_PATH : /LM/W3SVC/894523/Root
    APPL_PHYSICAL_PATH : D:VssWorkFolderBritish_School_MISsrcWebSite
    INSTANCE_META_PATH : /LM/W3SVC/894523
    LOCAL_ADDR : 192.168.1.6
    PATH_INFO : /SysOption/BillingSetup1.aspx
    PATH_TRANSLATED : D:VssWorkFolderBritish_School_MISsrcWebSiteSysOptionBillingSetup1.aspx
    REMOTE_ADDR : 192.168.1.6
    REMOTE_HOST : 192.168.1.6
    SCRIPT_NAME : /SysOption/BillingSetup1.aspx
    SERVER_NAME : 192.168.1.6
    URL : /SysOption/BillingSetup1.aspx

      Request.ServerVariables是一个很强大的工具,可以帮助我们获取很多client和web宿主的信息,有兴趣的朋友可以通过以下代码看看它到底包含什么信息

            foreach (string s in Request.ServerVariables)
            {
                Response.Write(s + "  :  " + Request.ServerVariables[s] + "<br /><br />");
            }


      三 path转换

     
      1.转换为服务器端路径(Server.MapPath)
    web服务器端开发设计一个有趣的问题就是,地址转换。比如http地址/images/a.txt,如果你想在服务器端通过io读取这个文件,就得有这个文件的“本机地址(形如c:windowssystem32xx.dll)”,这时Server.MapPath就很有用了
    Response.Write(Request.MapPath(Request.Path));        输出为 D:VssWorkFolderBritish_School_MISsrcWebSiteSysOptionBillingSetup1.aspx
    2.转换为http地址(Page.ResolveClientUrl Page.ResolveUrl)
    Response.Write(Page.ResolveClientUrl("~/a/a.jpg"));      输出为 ../a/a.jpg 
    Response.Write(Page.ResolveUrl("~/a/a.jpg"));              输出为 /a/a.jpg 

      另外,我们使用upload控件上传文件时,用HttpPostedFile 。例如:

    HttpPostedFile file = context.Request.Files[i];//这里的context.Request.Files就是上传的文件集合.

    PS:此处乃是利用HttpHandler..在Page页面中可以自己用其它办法多文件上传.

      接着如何保存文件呢?

    利用HttpPostedFile的SaveAs方法即可,如: file.SaveAs(SpecifiedPath);

    此处的SpecifiedPath是上传文件的绝对路径.

      至于如何获取上传文件的路径.我们可以利用Path类.来操作File.HttpPostedFile类中也包含了文件的基本信息.如文件名,大小,路径等等.Path类操作更齐全而已.接着就可以利用Server.MapPath()方法来进行转换.

      为检验上面的理论,你可以编写一段code跑下就一清二楚啦。例:

    StringBuilder req = new StringBuilder(); 

    req.Append("<table cellpadding=3 cellspacing=0 border=1>"); 

    // Request.ApplicationPath 

    req.Append("<tr><td>"); 

    req.Append("Request.ApplicationPath"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.ApplicationPath + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.PhysicalPath 

    req.Append("<tr><td>"); 

    req.Append("Request.PhysicalPath"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.PhysicalPath + "</b>"); 

    req.Append("</td></tr>"); 

    // System.IO.Path.GetDirectoryName(Request.PhysicalPath) 

    req.Append("<tr><td>"); 

    req.Append("System.IO.Path.GetDirectoryName(Request.PhysicalPath)"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + System.IO.Path.GetDirectoryName(Request.PhysicalPath) + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.PhysicalApplicationPath 

    req.Append("<tr><td>"); 

    req.Append("Request.PhysicalApplicationPath"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.PhysicalApplicationPath + "</b>"); 

    req.Append("</td></tr>"); 

    // System.IO.Path.GetFileName(Request.PhysicalPath) 

    req.Append("<tr><td>"); 

    req.Append("System.IO.Path.GetFileName(Request.PhysicalPath)"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + System.IO.Path.GetFileName(Request.PhysicalPath) + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.CurrentExecutionFilePath 

    req.Append("<tr><td>"); 

    req.Append("Request.CurrentExecutionFilePath"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.CurrentExecutionFilePath + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.FilePath 

    req.Append("<tr><td>"); 

    req.Append("Request.FilePath"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.FilePath + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.Path 

    req.Append("<tr><td>"); 

    req.Append("Request.Path"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.Path + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.RawUrl 

    req.Append("<tr><td>"); 

    req.Append("Request.RawUrl"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.RawUrl + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.Url.AbsolutePath 

    req.Append("<tr><td>"); 

    req.Append("Request.Url.AbsolutePath"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.Url.AbsolutePath + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.Url.AbsoluteUri 

    req.Append("<tr><td>"); 

    req.Append("Request.Url.AbsoluteUri"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.Url.AbsoluteUri + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.Url.Scheme 

    req.Append("<tr><td>"); 

    req.Append("Request.Url.Scheme"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.Url.Scheme + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.Url.Host 

    req.Append("<tr><td>"); 

    req.Append("Request.Url.Host"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.Url.Host + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.Url.Port 

    req.Append("<tr><td>"); 

    req.Append("Request.Url.Port"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.Url.Port + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.Url.Authority 

    req.Append("<tr><td>"); 

    req.Append("Request.Url.Authority"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.Url.Authority + "</b>"); 

    req.Append("</td></tr>"); 

    // local Request.Url.LocalPath 

    req.Append("<tr><td>"); 

    req.Append("Request.Url.LocalPath"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.Url.LocalPath + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.PathInfo 

    req.Append("<tr><td>"); 

    req.Append("Request.PathInfo"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.PathInfo + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.Url.PathAndQuery 

    req.Append("<tr><td>"); 

    req.Append("Request.Url.PathAndQuery"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.Url.PathAndQuery + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.Url.Query 

    req.Append("<tr><td>"); 

    req.Append("Request.Url.Query"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.Url.Query + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.Url.Fragment 

    // 原则上你应该无法从 Request.Url.Fragment 取得任何数据,因为通常 Browser 不会送出 #toc 这个部分 

    req.Append("<tr><td>"); 

    req.Append("Request.Url.Fragment"); 

    req.Append("</td><td>"); 

    req.Append("<b>" + Request.Url.Fragment + "</b>"); 

    req.Append("</td></tr>"); 

    // Request.Url.Segments 

    req.Append("<tr>"); 

    req.Append("<td>"); 

    req.Append("Request.Url.Segments"); 

    req.Append("</td>"); 

    req.Append("<td>"); 

    string[] segments = Request.Url.Segments; 

    foreach (string s in segments) 

        req.Append("<b>" + s + "</b>"); 

        req.Append("<p>"); 

    req.Append("</td>"); 

    req.Append("</tr>"); 

    req.Append("</table>"); 

    Response.Write(req.ToString()); 

     参考的文章:
    http://blog.miniasp.com/post/2008/02/10/How-Do-I-Get-Paths-and-URL-fragments-from-the-HttpRequest-object.aspx

    http://www.cnblogs.com/zyip/archive/2009/08/13/1544968.html

    如有错误,请不吝指出。

    另加上一个实例:

    // Builds an absolute URL
      private static string BuildAbsolute(string relativeUri)
      {
        // get current uri
        Uri uri = HttpContext.Current.Request.Url;
        // build absolute path
        string app = HttpContext.Current.Request.ApplicationPath;
        if (!app.EndsWith("/")) app += "/";
        relativeUri = relativeUri.TrimStart('/');
        // return the absolute path
        return HttpUtility.UrlPathEncode(
          String.Format("http://{0}:{1}{2}{3}",
          uri.Host, uri.Port, app, relativeUri));
      }

  • 相关阅读:
    LeetCode Subsets II
    LeetCode Rotate Image
    LeetCode Palidrome Number
    LeetCode Generate Parentheses
    LeetCode Maximum Subarray
    LeetCode Set Matrix Zeroes
    LeetCode Remove Nth Node From End of List
    Linux Loop设备 使用
    Linux 文件系统大小调整
    LeetCode N-Queens II
  • 原文地址:https://www.cnblogs.com/keyyang/p/4000065.html
Copyright © 2011-2022 走看看