对象化的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和请求对象HttpRequest的更多相关文章
- django 获取request请求对象及response响应对象中的各种属性值
django request对象和HttpResponse对象 HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外) HttpRequest.scheme 请求方案 ...
- C#-WebForm-★内置对象简介★Request-获取请求对象、Response相应请求对象、Session全局变量(私有)、Cookie全局变量(私有)、Application全局公共变量、ViewState
内置对象: 1.Request - 获取请求对象 用法:接收传值 protected void Page_Load(object sender, EventArgs e) { TextBox1.Tex ...
- request请求对象实例
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoRequest.as ...
- Request To JavaBean(请求对象转换为JavaBean对象)
背景: 经常要从request等对象取出值来赋入bean中,如果不用MVC框架的绑定功能的话,麻烦 一 参考资料 1 http://jc-dreaming.iteye.com/blog/563893 ...
- Servlet的学习之Request请求对象(3)
本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...
- Servlet的学习之Request请求对象(2)
在上一篇<Servlet的学习(十)>中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能. 使用Ht ...
- Servlet的学习之Request请求对象(1)
在本篇中开始对Servlet中的HttpServletRequest请求对象进行学习,请求对象同响应对象一样,我们可以根据该对象中的方法获取例如请求行,请求头和请求实体数据的方法. 在本篇中先对Htt ...
- JSP内置九个对象Request请求对象
jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...
- Flask的请求对象--request
request-Flask的请求对象 请求解析和响应封装大部分是有Werkzeug完成的,Flask子类化Werkzeug的请求(Request)对象和响应(Response)对象,并添加了和程序的特 ...
随机推荐
- C语言操作符优先级
C语言操作符优先级 优先级 运算符 含 义 要求运算 对象的个数 结合方向 1 () [] -> . 圆括号 下标运算符 指向结构体成员运算符 结构体成员运算符 自左至右 2 ! 逻辑非运 ...
- matlab矩阵合并及相关运算
1.matlab允许向量(和矩阵)合并,且matlab提供了两种合并方式,[a,b]和[a;b],两者的结果是不一样的. a=rand(2,3): b=rand(2,3): c=[a;b]: d=[a ...
- Activiti系列——如何在eclipse中安装 Activiti Designer插件
这两天在评估jbpm和Activiti,需要安装一个Activiti Designer插件试用一下. 一.在线安装 从<Activiti实战>了解到可以通过如下方式安装 打开Eclipse ...
- Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- 一起写一个Android图片加载框架
本文会从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做 ...
- 慢牛APP相关截图
慢牛APP相关截图 第一和第二个版本都是基于Sencha Touch+Cordova开发,公众号是采用Angularjs+D3开发,第三个版本是采用React Native开发. 第一个版本 第二个版 ...
- HTML5 中canvas支持触摸屏的签名面板
1.前言 最近实在是太忙了,从国庆之后的辞职,在慢慢的找工作,到今天在现在的这家公司上班大半个月了,太多的心酸泪无以言表,面试过程中,见到的坑货公司是一家又一家,好几家公司自己都只是上一天班就走了,其 ...
- 正确对待bug
正确对待bug 2016-10-09 公众号:一只程序媛 以前我一直以为bug是代码的天敌,我以为好的程序媛写出来的代码是应该没有bug的,零bug是终极奋斗目标. 后来,看到一句话"上帝创 ...
- angular_routerJS_学习
//这几天看了angularjs和backbone,大看了解了knockout和emberjs,刚刚上网看到了一个angular的router的demo,现在顺便记下来 <!--- DEMO_I ...
- JS_工厂模式
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...