Web路径相关

1.Request.ApplicationPath->当前应用的目录 
  Jsp中, ApplicationPath指的是当前的application(应用程序)的目录,ASP.NET中也是这个意思。 
  对应的--例如我的服务器上有两个web应用域名都是mockte.com 一个映射到目录mockte.com/1/ 另一个影射到 http://mockte.com/2/ 
  那么mockte.com/1/就是第一个应用的ApplicationPath 同理 mockte.com/2/就是第二个应用的ApplicationPath 

2.Request.FilePath->对应于iis的虚拟目录 
  如 URL http://mockte.com/1/index.html/pathinfo 
  FilePath = /1/index.html 

3.Request.Path->当前请求的虚拟路径 
  Path 是 FilePath 和 PathInfo 尾部的串联。例如 URL http://mockte.com/1/index.html/pathinfo 
  那么Path = /1/index.html/pathinfo 

4.Request.MapPath(string url)->将url映射为iis上的虚拟目录 
  这个目录都是相对于application的根目录的 
  于Server.MapPath相比,不会包含类似c:/这样的路径 
  可以理解为是相对路径(对比的Server.MapPath就是绝对路径) 

5.Server.MapPath(string url)->将url映射为服务器上的物理路径 
  例如 http://mockte.com/1/index.html  假设你的应用程序在c:/iis/MySite中 
  那么就是 c:/iis/MySite/1/index.html

 

底下這張表就是各種跟 Browser Request 的網址相關的屬性與用法:

 

網址:http://localhost:1897/News/Press/Content.aspx/123?id=1#toc
Request.ApplicationPath /
Request.PhysicalPath D:/Projects/Solution/web/News/Press/Content.aspx
System.IO.Path.GetDirectoryName(Request.PhysicalPath) D:/Projects/Solution/web/News/Press
Request.PhysicalApplicationPath D:/Projects/Solution/web/
System.IO.Path.GetFileName(Request.PhysicalPath) Content.aspx
Request.CurrentExecutionFilePath /News/Press/Content.aspx
Request.FilePath /News/Press/Content.aspx
Request.Path /News/Press/Content.aspx/123
Request.RawUrl /News/Press/Content.aspx/123?id=1
Request.Url.AbsolutePath /News/Press/Content.aspx/123
Request.Url.AbsoluteUri http://localhost:1897/News/Press/Content.aspx/123?id=1
Request.Url.Scheme http
Request.Url.Host localhost
Request.Url.Port 1897
Request.Url.Authority localhost:1897
Request.Url.LocalPath /News/Press/Content.aspx/123
Request.PathInfo /123
Request.Url.PathAndQuery /News/Press/Content.aspx/123?id=1
Request.Url.Query ?id=1
Request.Url.Fragment  
Request.Url.Segments /
News/
Press/
Content.aspx/
123

 

6. Request.UrlReferrer的使用 

Request.UrlReferrer可以获取客户端上次请求的url的有关信息,这样我们就可以通过这个属性返回到“上一页”。
示例如下:
1.      首先在Page_load中获得并储存该信息
Page_load(object obj,EventArgs e)
{
  if(!IsPostBack)
  {
    if(Request.UrlReferrer!=null)  // 
    {
      ViewState["UrlReferrer"]=Request.UrlReferrer.ToString();
    }
  }
}
l        页面回发后会改变Request.UrlReferrer,将其指向当前页面,所以需要进行判断:只有在第一次请求页面的时候才储存该信息;
l        因为可能“上一次”的url不存在,所以需要进行判断,只有在Request.UrlReferrer存在的情况下才进行储存;

2.      然后在返回函数中使用该信息
void Return()
{
  if(ViewState["UrlReferrer"]!=null)
  Response.Redirect(ViewState["UrlReferrer"].ToString();
}
在使用Request.UrlReferrer时还要注意: 
(1) 如果上一页面使用document.location方法导航到当前页面,Request.UrlReferrer返回空值;
(2) 如果有A,B两个页面,在浏览器中直接请求A页面,在A页面的中Page_Load事件中导航到B 页面,则 Request.UrlReferrer返回空。因为 在Page_load事件中页面还未初始化,所以无法记录当前页的信息,导航到b页面也就无法获得上一页面的信息;
(3) 点击刷新按钮不会改变Request.UrlReferrer;

7. Resolve.ClientUrl和ResolveUrl的区别

ResolveUrl是全路径,肯定不会错。不考虑当前页面。是VirtualPathUtitlity.ToAbolute直接调用。
而ResolveClientUrl是考虑当前页面的相对路径,尽可能的得到最短的路径。比如ResolveClientUrl("~/a/b.aspx")结果就是a/b/aspx

 

posted @ 2016-10-20 17:00  oliverary  阅读(114)  评论(0)    收藏  举报