对象化的Http和请求对象HttpRequest

在面向对象的语言中,有种“万物皆对象”的说法。在上篇文章中介绍了HttpRuntime类,在该类收到请求之后,立即通过HttpWorkerRequest工作者对象对传递的参数进行分析和分解,创建方便网站应用程序处理的对象。与此相关的对象主要有,请求和响应两个对象。即HttpRequest和HttpResponse类型。

HttpRequest定义在命名空间System.Web下

    // Summary:
    //     Enables ASP.NET to read the HTTP values sent by a client during a Web request.
    public sealed class HttpRequest

对于每一个请求参数,HttpRuntime将创建一个类型为HttpRequest的对象。

这个类定义了大量的属性,用于表示关于Http请求的参数。这些参数来源于工作者对象HttpWorkerRequest,但HttpRequest提供了更加简便的方式。

Http的请求消息包括三部分,分别是:请求行,请求头,请求体。

下面看一下HttpRequest的常见属性。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace HttpRequestDemo
{
    public partial class Test : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            //请求的类型,get或者post,可读写
            sb.AppendFormat("RequestType:{0}<br/>", Request.RequestType);
            //Httpq请求的方法,get,post或者head,只读
            sb.AppendFormat("HttpMethod:{0}<br/>", Request.HttpMethod);
            //通过工作者对象HttpWorkerRequest获取的请求原始字符串形式的Url地址
            sb.AppendFormat("RawUrl:{0}<br/>", Request.RawUrl);
            //System.Uri类型的请求地址
            sb.AppendFormat("Url:{0}<br/>", Request.Url);
            //取得导致当前请求的上一个地址
            sb.AppendFormat(":{0}<br/>", Request.UrlReferrer);
            //请求的虚拟路径,不包含请求参数信息
            sb.AppendFormat("FilePath:{0}<br/>", Request.FilePath);
            //请求的虚拟路径,通常情况下,相当于FilePath,当通过Server.Execute执行的时候,FilePath不变,而CurrentExecutionFilePath表示原来的虚拟路径。
            sb.AppendFormat("CurrentExecutionFilePath:{0}<br/>", Request.CurrentExecutionFilePath);
            //请求的虚拟路径,包含请求参数信息
            sb.AppendFormat("Path:{0}<br/>", Request.Path);
            //yi~开头的相对虚拟路径
            sb.AppendFormat("AppRelativeCurrentExecutionFilePath:{0}<br/>", Request.AppRelativeCurrentExecutionFilePath);
            //web应用程序所在的文件系统的目录
            sb.AppendFormat("PhysicalApplicationPath:{0}<br/>", Request.PhysicalApplicationPath);
            //当前请求虚拟路径所对应的文件系统路径
            sb.AppendFormat("PhysicalPath:{0}<br/>", Request.PhysicalPath);
            //取得url请求参数 NameValueCollection类型
            foreach (string item in Request.QueryString.Keys)
            {
                sb.AppendFormat("QueryString:Name={0},value={1}<br/>", item, Request.QueryString[item]);
            }
            //客户端可以接受的类型
            sb.AppendFormat("AcceptTypes:{0}<br/>", string.Join(",", Request.AcceptTypes));
            //通过form表单提交的参数 NameValueCollection类型
            foreach (string item in Request.Form.Keys)
            {
                sb.AppendFormat("Form:Name={0},value={1}<br/>", item, Request.Form[item]);
            }
            //请求头中的参数
            foreach (string item in Request.Headers.Keys)
            {
                sb.AppendFormat("Headers:Name={0},value={1}<br/>", item, Request.Headers[item]);
            }
            //请求中的cookies
            foreach (string item in Request.Cookies.Keys)
            {
                sb.AppendFormat("Cookies:Name={0},value={1}<br/>", item, Request.Cookies[item]);
            }
            //web服务器提供的参数
            //foreach (string item in Request.ServerVariables.Keys)
            //{
            //    sb.AppendFormat("ServerVariables:Name={0},value={1}<br/>", item, Request.ServerVariables[item]);
            //}
            //客户端上传的文件集合
            foreach (HttpPostedFile item in Request.Files)
            {
                sb.AppendFormat("FileName:{0}<br/>", item.FileName);
            }
            //提供统一的方法来访问 QueryString,Form,Cookies,ServerVariables中的参数
            foreach (string item in Request.Params.Keys)
            {
                sb.AppendFormat("Params:Name={0},value={1}<br/>", item, Request.Params[item]);
            }
            //主体部分
            //请求主体的编码
            sb.AppendFormat("ContentEncoding:{0}<br/>", Request.ContentEncoding);
            //请求主体的长度
            sb.AppendFormat("ContentLength:{0}<br/>", Request.ContentLength);
            // 请求主体的类型
            sb.AppendFormat("ContentType:{0}<br/>", Request.ContentType);
            //浏览器类型
            sb.AppendFormat("Browser:{0}<br/>", Request.Browser);
            //用户代理,即浏览器
            sb.AppendFormat("UserAgent:{0}<br/>", Request.UserAgent);
            //客户端地址
            sb.AppendFormat("UserHostAddress:{0}<br/>", Request.UserHostAddress);
            //客户端DNS
            sb.AppendFormat(":{0}<br/>", Request.UserHostName);
            //客户端语言
            sb.AppendFormat("UserLanguages:{0}<br/>", string.Join(",", Request.UserLanguages));

            Response.Write(sb.ToString());
        }
    }
}

输出结果

RequestType:GET
HttpMethod:GET
RawUrl:/Test.aspx
Url:http://192.168.1.105:8888/Test.aspx
:
FilePath:/Test.aspx
CurrentExecutionFilePath:/Test.aspx
Path:/Test.aspx
AppRelativeCurrentExecutionFilePath:~/Test.aspx
PhysicalApplicationPath:D:\DeepLearn\
PhysicalPath:D:\DeepLearn\Test.aspx
AcceptTypes:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Headers:Name=Cache-Control,value=max-age=0
Headers:Name=Connection,value=keep-alive
Headers:Name=Accept,value=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Headers:Name=Accept-Encoding,value=gzip, deflate, sdch
Headers:Name=Accept-Language,value=zh-CN,zh;q=0.8
Headers:Name=Host,value=192.168.1.105:8888
Headers:Name=User-Agent,value=Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Headers:Name=Upgrade-Insecure-Requests,value=1
Params:Name=ALL_HTTP,value=HTTP_CACHE_CONTROL:max-age=0 HTTP_CONNECTION:keep-alive HTTP_ACCEPT:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 HTTP_ACCEPT_ENCODING:gzip, deflate, sdch HTTP_ACCEPT_LANGUAGE:zh-CN,zh;q=0.8 HTTP_HOST:192.168.1.105:8888 HTTP_USER_AGENT:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 HTTP_UPGRADE_INSECURE_REQUESTS:1 
Params:Name=ALL_RAW,value=Cache-Control: max-age=0 Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8 Host: 192.168.1.105:8888 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 Upgrade-Insecure-Requests: 1 
Params:Name=APPL_MD_PATH,value=/LM/W3SVC/4/ROOT
Params:Name=APPL_PHYSICAL_PATH,value=D:\DeepLearn\
Params:Name=AUTH_TYPE,value=
Params:Name=AUTH_USER,value=
Params:Name=AUTH_PASSWORD,value=
Params:Name=LOGON_USER,value=
Params:Name=REMOTE_USER,value=
Params:Name=CERT_COOKIE,value=
Params:Name=CERT_FLAGS,value=
Params:Name=CERT_ISSUER,value=
Params:Name=CERT_KEYSIZE,value=
Params:Name=CERT_SECRETKEYSIZE,value=
Params:Name=CERT_SERIALNUMBER,value=
Params:Name=CERT_SERVER_ISSUER,value=
Params:Name=CERT_SERVER_SUBJECT,value=
Params:Name=CERT_SUBJECT,value=
Params:Name=CONTENT_LENGTH,value=0
Params:Name=CONTENT_TYPE,value=
Params:Name=GATEWAY_INTERFACE,value=CGI/1.1
Params:Name=HTTPS,value=off
Params:Name=HTTPS_KEYSIZE,value=
Params:Name=HTTPS_SECRETKEYSIZE,value=
Params:Name=HTTPS_SERVER_ISSUER,value=
Params:Name=HTTPS_SERVER_SUBJECT,value=
Params:Name=INSTANCE_ID,value=4
Params:Name=INSTANCE_META_PATH,value=/LM/W3SVC/4
Params:Name=LOCAL_ADDR,value=192.168.1.105
Params:Name=PATH_INFO,value=/Test.aspx
Params:Name=PATH_TRANSLATED,value=D:\DeepLearn\Test.aspx
Params:Name=QUERY_STRING,value=
Params:Name=REMOTE_ADDR,value=192.168.1.105
Params:Name=REMOTE_HOST,value=192.168.1.105
Params:Name=REMOTE_PORT,value=3445
Params:Name=REQUEST_METHOD,value=GET
Params:Name=SCRIPT_NAME,value=/Test.aspx
Params:Name=SERVER_NAME,value=192.168.1.105
Params:Name=SERVER_PORT,value=8888
Params:Name=SERVER_PORT_SECURE,value=0
Params:Name=SERVER_PROTOCOL,value=HTTP/1.1
Params:Name=SERVER_SOFTWARE,value=Microsoft-IIS/10.0
Params:Name=URL,value=/Test.aspx
Params:Name=HTTP_CACHE_CONTROL,value=max-age=0
Params:Name=HTTP_CONNECTION,value=keep-alive
Params:Name=HTTP_ACCEPT,value=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Params:Name=HTTP_ACCEPT_ENCODING,value=gzip, deflate, sdch
Params:Name=HTTP_ACCEPT_LANGUAGE,value=zh-CN,zh;q=0.8
Params:Name=HTTP_HOST,value=192.168.1.105:8888
Params:Name=HTTP_USER_AGENT,value=Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Params:Name=HTTP_UPGRADE_INSECURE_REQUESTS,value=1
ContentEncoding:System.Text.UTF8Encoding
ContentLength:0
ContentType:
Browser:System.Web.Mobile.MobileCapabilities
UserAgent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
UserHostAddress:192.168.1.105
UserHostName:192.168.1.105
UserLanguages:zh-CN,zh;q=0.8

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/5204778.html
时间: 2024-07-28 18:47:37

对象化的Http和请求对象HttpRequest的相关文章

Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解_php实例

本文实例讲述了Zend Framework教程之请求对象的封装Zend_Controller_Request方法.分享给大家供大家参考,具体如下: 概述 请求对象是在前端控制器,路由器,分发器,以及控制类间传递的简单值对象.请求对象封装了请求的模块,控制器,动作以及可选的参数,还包括其他的请求环境,如HTTP,CLI,PHP-GTK. 请求对象的基本实现 ├── Request │   ├── Abstract.php │   ├── Apache404.php │   ├── Exceptio

PHP 中TP5 Request 请求对象的实例详解

PHP 中TP5 Request 请求对象 public/index.php <?php // [ 应用入口文件 ] // 定义应用目录 define('APP_PATH', __DIR__ . '/../app/'); // 定义配置文件目录和应用目录同级 define('CONF_PATH', __DIR__.'/../config/'); // 加载框架引导文件 require __DIR__ . '/../thinkphp/start.php'; app\index\controller

ASP请求对象Request

request|对象|请求    当用户通过HTTP访问服务器,要按照一定的输入参数,返回不同的结果,要用到Request对象.      比如:http://localhost/zxg.asp?a=1&b=2     <%          if request("a")=1 and request("b")=2 then                 //处理一些相关的内容                respose.write("s

关于我的一个请求对象重构方案 的疑问

问题描述 var net ={};net.ContentLoader = function(url,dealBusinessLogic){this.url=url;this.dealBusinessLogic=dealBusinessLogic;loadXMLDoc();}net.ContentLoader.prototype={loadXMLDoc:function(){this.createReq();this.setConnect();this.sendReq();this.waitAnd

HttpWebReques请求对象,URI丢失#后的数据

问题描述 strReqXml是一个XML文件的字符串,其中参数值带有#号,生成strCCIUri2后,#后面的值就丢掉了请高手帮忙!谢谢代码如下:DimstrReqXmlPathAsString=strPathFileNameDimobjReadReqAsStreamReader=NewStreamReader(strReqXmlPath,Encoding.UTF8)DimstrReqXmlAsString=objReadReq.ReadToEnd()DimstrCCIUriAsString=E

如何从字符串构建HTTPRequest

问题描述 目前在程序中需要从HTTP请求的原始串构建出HttpRequest对象,然后发送出去,请问有什么方法?例如访问百度的Http请求头如下,需要构建出一个请求对象.GEThttp://www.baidu.com/index.php?tn=monline_5_dgHTTP/1.1Host:www.baidu.comUser-Agent:Mozilla/5.0(WindowsNT6.3;WOW64;rv:34.0)Gecko/20100101Firefox/34.0Accept:text/ht

Android开发使用AndBase框架完成Http请求

AndBase框架为我们提供了一些相关的方法提供给我们使用,用来完成Http网络请求...总体就是对Http请求的一个封装,不过个人认为,网络请求这一模块更加推荐使用Volley框架..楼主对比了两个框架中的源码...Volley更多的地方是使用抽象方法封装在接口内,然后对外暴露接口,其他类在实现接口的同时需要实现内部的抽象方法...而AndBase则是使用继承的方式..继承父类..实现类通过重写的方式对封装的方法重写从而进行下一步的操作... 相比二者网络请求的源码,Volley源码的书写还是

HTTP请求 HttpContext类用法详解

在处理请求执行链的各个阶段中,会有一个对象在各个对象之间进行传递,也即会保存请求的上下文信息,这个对象就是HttpContext对象.HttpContext粉状了ASP.NET要处理的单次请求的所有信息.在请求处理机制建立时,HttpContext类有HttpRuntime对象实例化,接着该对象会经历请求生存期的各个阶段.如图所示:                            图:封装了请求所有有关信息的HttpContext对象沿HTTP管道传递,直到生成客户端响应 HttpCont

Android AndBase框架使用封装好的函数完成Http请求(三)_Android

本文是针对AndBase框架学习整理的第三篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习. 学习内容: 1.使用AndBase框架实现无参Http Get请求... 2.使用AndBase框架实现有参Http Post请求... 3.使用AndBase框架实现有参Http Get请求...    AndBase框架为我们提供了一些相关的方法提供给我们使用,用来完成Http网络请求...总体就是对Http请求的一个封装,不过个人认为,网络请求这一模块更加推荐使用Volley框架