asp.net编程篇之Request对象和虚拟路径

编程处理”~”
(1) 如果在服务端控件中(使用runat=”server”的控件)会自动将”~”进行转换,如果在HTML控件或者需要在代码中转换的话可以使用VirtualPathUtility类中静态方法进行虚拟路径,全路径等的转换,比如:VirtualPathUtility.ToAbsolute(“~/a/b.aspx”)就是将虚拟路径转换为相对应于应用程序根目录的全路径,也就是”WebSite/a/b.aspx”。

(2) VirtualPathUtility类的主要方法

 1) string AppendTrailingSlash(string VirtualPath);如果路径VirtualPath最后没有”/”则添加。

 2) string Combine(string basePath,string relativePath);将两个路径进行合并。

 3) string GetDirectory(string virtualPath); 返回虚拟路径的目录部分。

 4) string MakeRelative(string fromPath,string toPath); 计算两个虚拟路径的相对路径。

 5) ToAbsolute:转换为绝对路径。

(3) 举例说明:新建一个Web项目,起名为路径.aspx

 

 代码如下 复制代码

  <a href="/a.htm">a</a>&nbsp;

   <a href="~/b.htm">b</a>&nbsp;

   <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="/a.htm">ce1</asp:HyperLink>&nbsp;

   <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/b.htm">ce2</asp:HyperLink>

 然后拖放两个HyperLink控件,给两个控件的Text起名为Ce1,ce2,给两个控件的NavigateURl赋值为”/b.htm”,”~/b.htm”。在Page_Load事件下面写入如下代码:

 代码如下 复制代码

Response.Write("<a href='" + VirtualPathUtility.ToAbsolute("~/a/b.htm") + "'>动态</a>" + "<br />");

Response.Write(VirtualPathUtility.Combine(VirtualPathUtility.AppendTrailingSlash("~/a/b"), "c.htm"));

Request对象
(1) Request.AppRelativeCurrentExecutionFilePath,获取当前执行请求的相对于应用根目录的虚拟路径,以”~”开头,比如:”~/第七篇/index.aspx”。

Response.Write(Request.AppRelativeCurrentExecutionFilePath);

(2) Request.physicalApplicationPath,获取当前应用的物理路径,比如:E:programmer黑马程序员练习题aspnetpracticeashx

 代码如下 复制代码
Response.Write(Request.PhysicalApplicationPath);

(3) Request.PhysicalPath,获取当前请求的物理路径,比如:E:programmer黑马程序员练习题aspnetpracticeashx第七篇index.aspx

 代码如下 复制代码
Response.Write(Request.PhysicalPath + "<br />");

(4) Request.RawURL,获得原始请求URL,比如:/ashx/第7篇/Index.aspx,Request.URL获得请求的URL,比如:http://localhost:2602/ashx/第7篇/Index.aspx,区别涉及到URL重写的问题。

 代码如下 复制代码

      Response.Write(Request.RawUrl + "<br />");

      Response.Write(Request.Url + "<br />");

(5) Request.UrlReferrer网页的来源,可以根据这个判断从百度搜到的哪个关键字,防下载盗链,放图片盗链,可以伪造“本图片仅供博客园内部交流使用”,全局防盗链用Globals.asax。

(6) Request.UserHostAddress获得访问者的IP地址

 代码如下 复制代码
Response.Write(Request.UserHostAddress + "<br />");

(7) Request.UserLanguage获得访问者浏览器支持的语言,可以通过这个实现对不同语言的人显示不同页面。

 代码如下 复制代码
Response.Write(Request.UserLanguages + "<br />");

(8) Request.Cookies获取浏览器发过来的浏览器端的Cookie,从他里面读取Cookie值,比如:context.Request.Cookies[“mysessionID”],使用Request.Cookie的时候一般只是读取,将Cookie写回浏览器要用Response.Cookies。

(9) Request.MapPath(virtualPath)将虚拟路径转换为磁盘上的物理路径,request.Mappath(~/第七篇/index.aspx)就会得到:E:programmer黑马程序员练习题aspnetpracticeashx第七篇index.aspx

 代码如下 复制代码
 Response.Write(Request.MapPath("~/第七篇/index.aspx"));

(10) 新建一个文件夹Request对象,然后新建一个一般处理程序,新建一个HTML页面,在HTML页中写入如下代码:

 代码如下 复制代码
<img src="图片.ashx" />

然后在.ashx页面中写入如下代码:

 代码如下 复制代码

context.Response.ContentType = "image/JPEG";
 
         string fullPath = HttpContext.Current.Server.MapPath("1.jpg");
 
         using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(fullPath))
 
         {
 
             using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))
 
             {
 
                 if (context.Request.UrlReferrer == null) //如果直接浏览则没有URlReferrer
 
                 {
 
                     //g.Clear(System.Drawing.Color.White);
 
                     g.DrawString("禁止直接浏览图片,请在页面中查看", new System.Drawing.Font("宋体", 20), System.Drawing.Brushes.Red, 0, 0);
 
                 }
 
                 else if (context.Request.UrlReferrer.Host != "localhost")
 
                 {
 
                     g.Clear(System.Drawing.Color.White);
 
                     g.DrawString("本图片仅限内部使用", new System.Drawing.Font("宋体", 20), System.Drawing.Brushes.Red, 0, 0);
 
                 }
 
                 g.DrawString("你的IP是:" + context.Request.UserHostAddress, new System.Drawing.Font("宋体", 20), System.Drawing.Brushes.Red, 0, 0);
 
                 if (context.Request.UserHostAddress == "127.0.0.1" || context.Request.UserHostAddress == "192.168.0.1")
 
                 {
 
                     //如果直接访问图片URLReferrer就是null,如果是嵌入到别的网页中的请求,URLReferrer就是页面的地址
 
                     g.Clear(System.Drawing.Color.Blue);
 
                     g.DrawString("IP被屏蔽", new System.Drawing.Font("宋体", 20), System.Drawing.Brushes.Red, 0, 0);
 
                 }
 
             }
 
             bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
 
         }

时间: 2024-09-08 10:01:05

asp.net编程篇之Request对象和虚拟路径的相关文章

javascript asp教程第八课--request对象_ASP基础

Request Object: Request has five (5) Collections, one (1) Property, and one (1) Method. You'll use the Collections far more than the property or the method. Request Collections: Below is a table of the Request Collections and descriptions of how they

javascript asp教程第八课--request对象

Request Object: Request has five (5) Collections, one (1) Property, and one (1) Method. You'll use the Collections far more than the property or the method. Request Collections: Below is a table of the Request Collections and descriptions of how they

ASP入门教程-Request对象概述

Request对象在HTTP请求期间检索客户端浏览器传递给服务器的值.也就是说用它来与客户端交互,收集客户端信息或服务器端的环境变量,然后将收集的这些信息发送给服务器端或其它asp页面. 一.Request 对象的集合 Request对象共有5个集合,如下表: 集合名称 说 明 ClientCertificate 当客户端访问一个页面或其它资源时,用来向服务器表明身份的客户证书的所有字段或条目的数值集合,每个成员均是只读.(用于检索存储在发送到HTTP请求中客户端证书中的字段值) Cookies

Asp.ne response对象与request对象使用介绍

 这篇文章主要介绍了Asp.ne response对象与request对象使用,需要的朋友可以参考下 1.Response:服务器发给客户端信息,或者说是服务器的向用户发送输出结果.    Redirect:让客户端重新定向到指定的 URL.    Write:写出指定字符串.    2.request:客户端发给服务器,或者说是从客户端取得信息.    form:从使用post提交方式的表单获取表单元素的值.    querystring:取回查询字符串中的变量值,适用于get提交方式的表单.

ASP.NET的Request对象

  在ASP.NET编程中经常需要用Request获取url的有关信息,Request中有多种方法获取url信息,但我经常忘了各种方法的具体作用,今天我就写了个测试程序,将各种方法得到的结果列出来,以后用时直接参考一下就行了.   测试的url地址是[url]http://www.test.com/testweb/default.aspx[/url], 结果如下:     Request.ApplicationPath: /testweb Request.CurrentExecutionFile

ASP中Request对象获取客户端数据的顺序

request|对象|客户端|数据 在ASP中Request对象是获取客户端提交数据的一个很重要的对象,大家对它也是非常熟悉了. 虽然如此,还是经常有人问我下面的几种写法有什么不同,到底应该怎么写? strMessage = Request("msg")strMessage = Request.Form("msg") 而且,我也看过好多人写的代码,一律都是Request("")的写法,当然这样的写法并没有什么错. 只是大家应该注意Request对

Asp之Request对象(1)

request|对象 Request对象可以从客户端接收信息,取得浏览器上相关信息,这些信息包括通过网址参数传递的信息,HTML表单中用post或get方法的参数和cookie等. 1.读取网址的参数信息在网址中传递参数,方法如下:http://<网址>/<网页文件>?<参数名>=<参数值>如果有多个参数,可以使用&连接通过Request.QueryString数据集合读取示例:http://re.asp?name=jhong '传递一个参数传递了一

ASP教程之Request对象的使用

request|对象|教程 ASP主要有五个内建(built-in)对象:Server.Request.Response.Application和Session.现在我们通过举例来对它们进行讲解.首先是最常使用的Response对象. 例1 利用Response在网页中输出HTML文档 <html><head><title>ASP示例1</title></head><body><%Response.Write "<

技巧:ASP中用Request对象获取客户端数据

request|对象|技巧|客户端|数据 在ASP中Request对象是获取客户端提交数据的一个很重要的对象,大家对他也是非常熟悉了. 虽然如此,还是经常有人问我下面的几种写法有什么不同,到底应该怎么写? strMessage = Request("msg") strMessage = Request.Form("msg") 而且,我也看过好多人写的代码,一律都是Request("")的写法,当然这样的写法并没有什么错. 只是大家应该注意 Req