ASP.NET (2)
Request对象
Request.AppRelativeCurrentExecutionFilePath:获取当前执行请求对于应用根目录的虚拟路径,以~开头,例“~/index.aspx”
Request.PhysicalApplicationPath:获取当前应用的物理路径 D:\Application\
Request.PahsicalPath:获取当前请求的物理路径 D:\Application\index.aspx
Request.RawUrl:获得原始请求Url、Request.Url获得请求的URL,区别在于url重写的问题
Request.UrlReferrer:网页的来源,可以判断从百度搜的哪个关键词、防盗链、可以伪造。
Request.UserHostAddress:获得访问者的IP地址。
Request.UserLanguages:获得访问者浏览器支持的语言,可以实现对不同语言的人显示不同语言的页面。
Request.Cookie:获取浏览器发来的Cookie
Request.MapPath():将虚拟路径转换为磁盘上的物理路径。
Response对象
响应的缓冲输出:为了提高服务器的性能,ASP.NET向浏览器Write的时候默认并不会每Write一次都会立即输出到浏览器,而是会缓存数据,到合适的时机或响应结束时才会将缓冲区中的数据一起发送到浏览器。
Response对象的主要成员:
Response.Buffer、Response.BufferOutput:反编译可以发现它们两个的属性是一样的,Buffer内部就是调用的BufferOutput。这个属性用来控制是否采用响应缓存,默认是true。
Response.Flush()将缓冲区中的数据发送给浏览器。
Response.Clear()清空缓冲区中的数据,这样缓冲区中的没有发送到浏览器的数据被清空,不会发送到浏览器。
Response.ContentEncoding输出流的编码。
Response.ContentType输出流的内容类型。(text/html、text/plain、image/jpeg)
Response.Cookie返回给浏览器的Cookie的集合,可以通过它来设置Cookie
Response.OutputStream输出流,在输出图片,Excel文件等非文本内容的时候要使用它
Response.End() 终止响应,将之前缓冲区中的数据发给浏览器,之后的到吗不会被继续执行。在终止一些非法请求的时候,例如盗链等可以使用。
Response.Redirect() 重定向。"302”
Response.SetCookie(HttpCookie cookie),向输出流中更新写到浏览器中的Cookie。
Response.Write() 向浏览器输出内容。
Response.WriteFile() 向浏览器输出文件。
Server对象
Server是context的一个属性,是HttpServerUtility类的一个对象
Server.Transfer()与Response.Redirect()的区别:
Server.Transfer(“index.aspx”)是将用户的请求重定向给index.aspx处理,是服务器内部接管,浏览器意识不到这个接管,Response.Redirect(“index1.aspx”)经历"通知浏览器‘请重新访问index1.aspx这个网址’和浏览器接到命令访问新网址的过程"。Server.Transfer()只有1次http请求,浏览器得知栏不会变化。而Response.Redirect()有2次http请求,浏览器地址栏会变化。因为是内部接管,所以在被重定向到的新的页面中是可以访问到Request、Cookie得百分这些来源页面接受的参数的,就像这些参数是传递给它的,而Redirect则不行,因为它是让浏览器去访问的。
Server.Transfer不能直接重定向到ashx,会报错“执行子请ingqiu出错”。
在Global.asax中得不到HttpContext对象可以通过HttpContext.Current得到当前的HttpContext。
Server.MapPath。如果得不到Server可以使用HostingEnvironment.MapPath()方法。
在aspx页面输出表达式的值的时候使用<%=UserName%>,相当于在当前位置调用Response.Write(UserName),使用的函数、代码相当于在这个位置调用函数、执行代码。注:在aspx中调用cs的成员级别必须是peotected或者public,不能是private。
<%%>中的代码是运行在服务器端的,是C#语法,其它部分是运行在浏览器端的,是html、JavaScript语法。
aspx、cs、dll之间的关系
在WebForm的页面中执行下面的代码
Response.Write(this.GetType()+"<br/>");
Response.Write(this.GetType().Assembly.Location+"<br/>");
Response.Write(this.GetType().BaseType+"<br/>");
Response.Write(this.GetType().BaseType.Assembly.Location+"<br/>");
发现当前执行页面的类名是ASP.webfrom1_aspx这样的类名,父类才是ASPNETTest1.WebForm1,用反编译工具打开这个临时dll,反编译这两个类,发现ASPNETTest1.WebForm1是在VS中编写的aspx.cs类,而ASP.webform1_aspx则是一个集成兹ASPNETTest1.WebForm1的子类,ASP.webform1_aspx代码是根据aspx内容动态生成的构建网页内容的类。aspx最终也会生成一个类,这个类是继承自aspx.cs中的类。所以“aspx中调用cs的成员级别必须是protected或者public,不能是private”。