HttpWorkerRequest这个抽象类,相信大家用到的不多,然而我们不能忽略它的存在,在很多时候,合理的使用该类,能够实现许多意想不到 的事情,下面就让我们一起来看看HttpWorkerRequest到底为我们提供了那些方法(65个)和属性,以及有56个之多的公共字段:
首先先看看HttpWorkerRequest的公共方法,一共有以下65个(http://msdn2.microsoft.com/zh- cn/library/system.web.httpworkerrequest(VS.80).aspx):
名称 | 说明 | |
---|---|---|
![]() | CloseConnection | 终止与客户端的连接。 |
![]() | EndOfRequest | 由运行库使用以通知 HttpWorkerRequest 当前请求的 请求处理已完成。 |
![]() | Equals | 已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。) |
![]() | FlushResponse | 将所有挂起的响应数据发送到客户端。 |
![]() | GetAppPath | 返回当前正在执行的服务器应用程序的虚拟路径。 |
![]() | GetAppPathTranslated | 返回当前正在执行的服务器应用程序的物理路径。 |
![]() | GetAppPoolID | 在派生类中被重写时,返回当前 URL 的应用程序池 ID。 |
![]() | GetBytesRead | 获取从客户端读入的字节数。 |
![]() | GetClientCertificate | 在派生类中被重写时,从客户端发出的请求获取证书字段(以 X.509 标准指定)。 |
![]() | GetClientCertificateBinaryIssuer | 获取证书颁发者(以二进制格式表示)。 |
![]() | GetClientCertificateEncoding | 在派生类中被重写时,返回用于编码客户端证书的 Encoding 对象。 |
![]() | GetClientCertificatePublicKey | 在派生类中被重写时,获取与客户端证书关联的 PublicKey 对象。 |
![]() | GetClientCertificateValidFrom | 在派生类中被重写时,则获取证书开始生效的日期。此日期随区域设置的不同而不同。 |
![]() | GetClientCertificateValidUntil | 获取证书到期日期。 |
![]() | GetConnectionID | 在派生类中被重写时,返回当前连接的 ID。 |
![]() | GetFilePath | 在派生类中被重写时,返回所请求的 URI 的虚拟路径。 |
![]() | GetFilePathTranslated | 返回请求的 URI 的物理文件路径(并将其从虚拟路径转换成物理路径:例如,从“/proj1/page.aspx”转换 成“c:/dir/page.aspx”) |
![]() | GetHashCode | 用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数 据结构(如哈希表)中使用。 (从 Object 继承。) |
![]() | GetHttpVerbName | 返回请求标头的指定成员。 |
![]() | GetHttpVersion | 提供对请求的 HTTP 版本(如“HTTP/1.1”)的访问。 |
![]() | GetKnownRequestHeader | 返回与指定的索引相对应的标准 HTTP 请求标头。 |
![]() ![]() | GetKnownRequestHeaderIndex | 返回指定的 HTTP 请求标头的索引号。 |
![]() ![]() | GetKnownRequestHeaderName | 返回指定的 HTTP 请求标头的名称。 |
![]() ![]() | GetKnownResponseHeaderIndex | 返回指定的 HTTP 响应标头的索引号。 |
![]() ![]() | GetKnownResponseHeaderName | 返回指定的 HTTP 响应标头的名称。 |
![]() | GetLocalAddress | 提供对请求标头的指定成员的访问。 |
![]() | GetLocalPort | 提供对请求标头的指定成员的访问。 |
![]() | GetPathInfo | 返回具有 URL 扩展的资源的其他路径信息。即对于路径 /virdir/page.html/tail,GetPathInfo 值 为 /tail。 |
![]() | GetPreloadedEntityBody | 已重载。 已重载。返回 HTTP 请求正文当前已被读取的部分。 |
![]() | GetPreloadedEntityBodyLength | 获取 HTTP 请求正文当前已被读取部分的长度。 |
![]() | GetProtocol | 在派生类中被重写时,返回 HTTP 协议(HTTP 或 HTTPS)。 |
![]() | GetQueryString | 返回请求 URL 中指定的查询字符串。 |
![]() | GetQueryStringRawBytes | 在派生类中被重写时,以字节数组的形式返回响应查询字符串。 |
![]() | GetRawUrl | 返回附加了查询字符串的请求标头中包含的 URL 路径。 |
![]() | GetRemoteAddress | 提供对请求标头的指定成员的访问。 |
![]() | GetRemoteName | 在派生类中被重写时,返回客户端计算机的名称。 |
![]() | GetRemotePort | 提供对请求标头的指定成员的访问。 |
![]() | GetRequestReason | 在派生类中被重写时,返回请求的原因。 |
![]() | GetServerName | 在派生类中被重写时,返回本地服务器的名称。 |
![]() | GetServerVariable | 从与请求关联的服务器变量词典返回单个服务器变量。 |
![]() ![]() | GetStatusDescription | 返回一个字符串,该字符串描述指定的 HTTP 状态代码的名称。 |
![]() | GetTotalEntityBodyLength | 获取整个 HTTP 请求正文的长度。 |
![]() | GetType | 获取当前实例的 Type。 (从 Object 继承。) |
![]() | GetUnknownRequestHeader | 返回非标准的 HTTP 请求标头值。 |
![]() | GetUnknownRequestHeaders | 获取所有非标准的 HTTP 标头的名称/值对。 |
![]() | GetUriPath | 返回请求的 URI 的虚拟路径。 |
![]() | GetUrlContextID | 当在派生类中被重写时,返回当前连接的上下文 ID。 |
![]() | GetUserToken | 在派生类中被重写时,返回客户端的模拟标记。 |
![]() | GetVirtualPathToken | 获取请求虚拟路径的模拟标记。 |
![]() | HasEntityBody | 返回一个值,该值指示请求是否包含正文数据。 |
![]() | HeadersSent | 返回一个值,该值指示是否已为当前的请求将 HTTP 响应标头发送到客户端。 |
![]() | IsClientConnected | 返回一个值,该值指示客户端连接是否仍处于活动状态。 |
![]() | IsEntireEntityBodyIsPreloaded | 返回一个值,该值指示是否所有请求数据都可用,以及是否不需要对客户端进行进一步读取。 |
![]() | IsSecure | 返回一个指示连接是否使用 SSL 的值。 |
![]() | MapPath | 返回与指定虚拟路径相对应的物理路径。 |
![]() | ReadEntityBody | 已重载。 已重载。读取客户端的请求数据(在尚未预加载时)。 |
![]() ![]() | ReferenceEquals | 确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。) |
![]() | SendCalculatedContentLength | 将 Content-LengthHTTP 标头添加到响应。 |
![]() | SendKnownResponseHeader | 将标准 HTTP 标头添加到响应。 |
![]() | SendResponseFromFile | 已重载。 将文件的内容添加到响应。 |
![]() | SendResponseFromMemory | 已重载。 将内存块的内容添加到响应。 |
![]() | SendStatus | 指定响应的 HTTP 状态代码和状态说明;例如 SendStatus(200, "Ok")。 |
![]() | SendUnknownResponseHeader | 将非标准 HTTP 标头添加到响应。 |
![]() | SetEndOfSendNotification | 在发送所有响应数据后注册可选通知。 |
![]() | ToString | 返回表示当前 Object 的 String。 (从 Object 继承。) |
其次,就是HttpWorkerRequest的56个公共字段,这些公共字段主要包括对HTTP请求标头()HTTP request header和相应标头(HTTP response header)的操作:
在System.Web.HttpRequest类中,为我们提供了一些获取Http Request信息的方法,这些方法实际上也是对Http请求标头和标体进行析取而得到的,直接使用HttpRequest类的方法来获取Http请求信息内容是特别方便的,所以当我们想要获取Http请求信息时,首先想到的应该是这个类,但是HttpRequest并没有为我们提供所有的信息获取方法,不过不用担心,我们还可以通过另外一个类来实现,那就是HttpWorkerRequest.
以下这些公共字段的索引号在HttpWorkerRequest中都有预先定义,类型为public const int,因此我们可以 对他们进行自定义,但考虑到安全性和完整性,在大部分情况下,我们不需要对其更改. 而事实上,更多的时候我们是通过这些索引号来获取 HTTP标头中的各种信息,这些信息丰富多样,其中有HTTP 请求的媒体类型(详见RFC 2616,标头类型域Accept的定义), HTTP请求的语言类型(详见RFC 2616,标头类型域Accept-Language的定义)以及 HTTP请求的标题,也就是HTTP实际内容的长度(详见RFC 2616,标头类型域Content-Length的定义)等.....
下面举个简单的例子来说明如何根据索引号来获取索引号所对应的标头地址(HeaderLocation):
public HttpWorkerRequest HwRequest;
string locationOfHttpHeader = HwRequest.GetKnownRequestHeader (HttpWorkerRequest.HeaderLocation);
下表来源于微软的在线MSDN,表中罗列出了HttpWorkerRequest类包含的所有公共字段以及公共字段的简单介绍,但是过于简单,在这里我 在每个公共字段说明的后面增加了该字段的默认索引号以及其所对应的HTTP协议标头类型的简要说明,希望能够对大家有些帮助:
![]() ![]() | HeaderAccept | 指定 AcceptHTTP 标头的索引号。 int 20 指定接受方所能接受的相应的媒体类 型以及相关参数. |
![]() ![]() | HeaderAcceptCharset | 指定 Accept-CharsetHTTP 标头的索引号。int 21 指定接受方所能接受的相应的字符集以及 相关参数. |
![]() ![]() | HeaderAcceptEncoding | 指定 Accept-EncodingHTTP 标头的索引号。int 22 指定接受方所能接受的HTTP请求的编码或 压缩类型以及参数,"gzip" 或者 "compress"格式优先. |
![]() ![]() | HeaderAcceptLanguage | 指定 Accept-LanguageHTTP 标头的索引号。int 23 指定接受方所能接受的语言种类以及相关 参数. |
![]() ![]() | HeaderAcceptRanges | 指定 Accept-RangesHTTP 标头的索引号。int 20 指定接受方是否接受带请求范围的HTTP请求 ,比如设置Accept-Ranges: bytes,也就是指明接受方可以根据偏移单位向量(以bytes为单位)来指定接收范围. |
![]() ![]() | HeaderAge | 指定 AgeHTTP 标头的索引号。int 21 划定某响应自原始服务器产生之时起所经历的时间长度 ,以秒为单位,主要用于cache,如果该HTTP响应的生命大于划定的时间长度,则该HTTP响应就是不"新鲜"(Not Fresh)的. |
![]() ![]() | HeaderAllow | 指定 AllowHTTP 标头的索引号。int 10 定义一个位于请求URI中的资源所支持的HTTP方法列 表,如GET, HEAD, PUT,服务器不一定要支持这些方法,但必须返回一个所支持的方法列表. |
![]() ![]() | HeaderAuthorization | 指定 AuthorizationHTTP 标头的索引号。int 24 指定访问权(当用户需要划定自己所拥有的 资源的使用权时)并以在HTTP请求标头增加授权标头域的形式限定自己的资源使用权. |
![]() ![]() | HeaderCacheControl | 表示 HTTPCache-ControlHTTP 标头的索引。int 0 用来定义缓存行为方式的通用标头. |
![]() ![]() | HeaderConnection | 指定 ConnectionHTTP 标头的索引号。int 1 |
![]() ![]() | HeaderContentEncoding | 指定 Content-EncodingHTTP 标头的索引号。int 13 |
![]() ![]() | HeaderContentLanguage | 指定 Content-LanguageHTTP 标头的索引号。int 14 |
![]() ![]() | HeaderContentLength | 指定 Content-LengthHTTP 标头的索引号。int 11 |
![]() ![]() | HeaderContentLocation | 指定 Content-LocationHTTP 标头的索引号。int 15 |
![]() ![]() | HeaderContentMd5 | 指定 Content-MD5HTTP 标头的索引号。int 16 |
![]() ![]() | HeaderContentRange | 指定 Content-RangeHTTP 标头的索引号。int 17 |
![]() ![]() | HeaderContentType | 指定 Content-TypeHTTP 标头的索引号。int 12 |
![]() ![]() | HeaderCookie | 指定 CookieHTTP 标头的索引号。int 25 |
![]() ![]() | HeaderDate | 指定 DateHTTP 标头的索引号。int 2 |
![]() ![]() | HeaderEtag | 指定 ETagHTTP 标头的索引号。int 22 |
![]() ![]() | HeaderExpect | 指定 ExceptHTTP 标头的索引号。int 26 |
![]() ![]() | HeaderExpires | 指定 ExpiresHTTP 标头的索引号。int 18 |
![]() ![]() | HeaderFrom | 指定 FromHTTP 标头的索引号。int 27 |
![]() ![]() | HeaderHost | 指定 HostHTTP 标头的索引号。int 28 |
![]() ![]() | HeaderIfMatch | 指定 If-MatchHTTP 标头的索引号。int 29 |
![]() ![]() | HeaderIfModifiedSince | 指定 If-Modified-SinceHTTP 标头的索引号。int 30 |
![]() ![]() | HeaderIfNoneMatch | 指定 If-None-MatchHTTP 标头的索引号。int 31 |
![]() ![]() | HeaderIfRange | 指定 If-RangeHTTP 标头的索引号。int 32 |
![]() ![]() | HeaderIfUnmodifiedSince | 指定 If-Unmodified-SinceHTTP 标头的索引号。int 33 |
![]() ![]() | HeaderKeepAlive | 指定 Keep-AliveHTTP 标头的索引号。int 3 |
![]() ![]() | HeaderLastModified | 指定 Last-ModifiedHTTP 标头的索引号。int 19 |
![]() ![]() | HeaderLocation | 指定 LocationHTTP 标头的索引号。int 23 |
![]() ![]() | HeaderMaxForwards | 指定 Max-ForwardsHTTP 标头的索引号。int 34 |
![]() ![]() | HeaderPragma | 指定 PragmaHTTP 标头的索引号。int 4 |
![]() ![]() | HeaderProxyAuthenticate | 指定 Proxy-AuthenticateHTTP 标头的索引号。int 24 |
![]() ![]() | HeaderProxyAuthorization | 指定 Proxy-AuthorizationHTTP 标头的索引号。int 35 |
![]() ![]() | HeaderRange | 指定 RangeHTTP 标头的索引号。int 37 |
![]() ![]() | HeaderReferer | 指定 RefererHTTP 标头的索引号。int 36 |
![]() ![]() | HeaderRetryAfter | 指定 Retry-AfterHTTP 标头的索引号。int 25 |
![]() ![]() | HeaderServer | 指定 ServerHTTP 标头的索引号。int 26 |
![]() ![]() | HeaderSetCookie | 指定 Set-CookieHTTP 标头的索引号。int 27 |
![]() ![]() | HeaderTe | 指定 TEHTTP 标头的索引号。int 38 |
![]() ![]() | HeaderTrailer | 指定 TrailerHTTP 标头的索引号。int 5 |
![]() ![]() | HeaderTransferEncoding | 指定 Transfer-EncodingHTTP 标头的索引号。int 6 |
![]() ![]() | HeaderUpgrade | 指定 UpgradeHTTP 标头的索引号。int 7 |
![]() ![]() | HeaderUserAgent | 指定 User-AgentHTTP 标头的索引号。int 39 |
![]() ![]() | HeaderVary | 指定 VaryHTTP 标头的索引号。int 28 |
![]() ![]() | HeaderVia | 指定 ViaHTTP 标头的索引号。int 8 |
![]() ![]() | HeaderWarning | 指定 WarningHTTP 标头的索引号。int 9 |
![]() ![]() | HeaderWwwAuthenticate | 指定 WWW-AuthenticateHTTP 标头的索引号。int 29 |
![]() ![]() | ReasonCachePolicy | 指定请求的原因。int 2 |
![]() ![]() | ReasonCacheSecurity | 指定请求的原因。int 3 |
![]() ![]() | ReasonClientDisconnect | 指定请求的原因。int 4 |
![]() ![]() | ReasonDefault | 指定请求的原因。默认值为 ReasonResponseCacheMiss。int 0 |
![]() ![]() | ReasonFileHandleCacheMiss | 指定请求的原因。int 1 |
![]() ![]() | ReasonResponseCacheMiss | 指定请求的原因。int 0 |
![]() ![]() | RequestHeaderMaximum | 指定 MaximumHTTP 请求标头的索引号。int 40 |
![]() ![]() | ResponseHeaderMaximum | 指定 MaximumHTTP 响应标头的索引号。int 30 |
未完待续................