• 转:ASP.NET中的路径(path) 详解


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

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

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

    输出(output)实例

    备        

    Request.ApplicationPath 

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

    Request.PhysicalPath 

    D:\Projects\Solution\web\News\Press\Content.aspx

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

    Request.PhysicalApplicationPath 

    D:\Projects\Solution\web\

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

    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:\Projects\Solution\web\News\Press 

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

     

    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:\VssWorkFolder\British_School_MIS\src\WebSite\
    INSTANCE_META_PATH : /LM/W3SVC/894523
    LOCAL_ADDR : 192.168.1.6
    PATH_INFO : /SysOption/BillingSetup1.aspx
    PATH_TRANSLATED : D:\VssWorkFolder\British_School_MIS\src\WebSite\SysOption\BillingSetup1.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:\windows\system32\xx.dll)”,这时Server.MapPath就很有用了
    Response.Write(Request.MapPath(Request.Path));        输出为 D:\VssWorkFolder\British_School_MIS\src\WebSite\SysOption\BillingSetup1.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));
      }

  • 相关阅读:
    .htaccess中的apache rewrite规则写法详解(未完)
    Linux LVM逻辑卷配置过程详解(创建、扩展、缩减、删除、卸载、快照创建)(未完)
    Linux的单用户模式
    linux proc目录和常用操作
    struts2 中的 addActionError 、addFieldError、addActionMessage的方法
    OGNL和类型转换
    ognl概念和原理详解
    java垃圾回收器
    java堆和栈的区别
    js的call()通俗解释
  • 原文地址:https://www.cnblogs.com/youxin/p/3122631.html
Copyright © 2020-2023  润新知