深入了解 System.Web.HttpWorkerRequest

来源:互联网 发布:linux 查询文件大小 编辑:程序博客网 时间:2024/05/29 21:28

HttpWorkerRequest这个抽象类,相信大家用到的不多,然而我们不能忽略它的存在,在很多时候,合理的使用该类,能够实现许多意想不到 的事情,下面就让我们一起来看看HttpWorkerRequest到底为我们提供了那些方法(65个)和属性,以及有56个之多的公共字段:

首先先看看HttpWorkerRequest的公共方法,一共有以下65个(http://msdn2.microsoft.com/zh- cn/library/system.web.httpworkerrequest(VS.80).aspx):

  名称 说明 Public method CloseConnection 终止与客户端的连接。 Public method EndOfRequest 由运行库使用以通知 HttpWorkerRequest 当前请求的 请求处理已完成。 Public method Equals  已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。) Public method FlushResponse 将所有挂起的响应数据发送到客户端。 Public method GetAppPath 返回当前正在执行的服务器应用程序的虚拟路径。 Public method GetAppPathTranslated 返回当前正在执行的服务器应用程序的物理路径。 Public method GetAppPoolID 在派生类中被重写时,返回当前 URL 的应用程序池 ID。 Public method GetBytesRead 获取从客户端读入的字节数。 Public method GetClientCertificate 在派生类中被重写时,从客户端发出的请求获取证书字段(以 X.509 标准指定)。 Public method GetClientCertificateBinaryIssuer 获取证书颁发者(以二进制格式表示)。 Public method GetClientCertificateEncoding 在派生类中被重写时,返回用于编码客户端证书的 Encoding 对象。 Public method GetClientCertificatePublicKey 在派生类中被重写时,获取与客户端证书关联的 PublicKey 对象。 Public method GetClientCertificateValidFrom 在派生类中被重写时,则获取证书开始生效的日期。此日期随区域设置的不同而不同。 Public method GetClientCertificateValidUntil 获取证书到期日期。 Public method GetConnectionID 在派生类中被重写时,返回当前连接的 ID。 Public method GetFilePath 在派生类中被重写时,返回所请求的 URI 的虚拟路径。 Public method GetFilePathTranslated 返回请求的 URI 的物理文件路径(并将其从虚拟路径转换成物理路径:例如,从“/proj1/page.aspx”转换 成“c:/dir/page.aspx”) Public method GetHashCode  用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数 据结构(如哈希表)中使用。 (从 Object 继承。) Public method GetHttpVerbName 返回请求标头的指定成员。 Public method GetHttpVersion 提供对请求的 HTTP 版本(如“HTTP/1.1”)的访问。 Public method GetKnownRequestHeader 返回与指定的索引相对应的标准 HTTP 请求标头。 Public method Static GetKnownRequestHeaderIndex 返回指定的 HTTP 请求标头的索引号。 Public method Static GetKnownRequestHeaderName 返回指定的 HTTP 请求标头的名称。 Public method Static GetKnownResponseHeaderIndex 返回指定的 HTTP 响应标头的索引号。 Public method Static GetKnownResponseHeaderName 返回指定的 HTTP 响应标头的名称。 Public method GetLocalAddress 提供对请求标头的指定成员的访问。 Public method GetLocalPort 提供对请求标头的指定成员的访问。 Public method GetPathInfo 返回具有 URL 扩展的资源的其他路径信息。即对于路径 /virdir/page.html/tail,GetPathInfo 值 为 /tail。 Public method GetPreloadedEntityBody 已重载。 已重载。返回 HTTP 请求正文当前已被读取的部分。 Public method GetPreloadedEntityBodyLength 获取 HTTP 请求正文当前已被读取部分的长度。 Public method GetProtocol 在派生类中被重写时,返回 HTTP 协议(HTTP 或 HTTPS)。 Public method GetQueryString 返回请求 URL 中指定的查询字符串。 Public method GetQueryStringRawBytes 在派生类中被重写时,以字节数组的形式返回响应查询字符串。 Public method GetRawUrl 返回附加了查询字符串的请求标头中包含的 URL 路径。 Public method GetRemoteAddress 提供对请求标头的指定成员的访问。 Public method GetRemoteName 在派生类中被重写时,返回客户端计算机的名称。 Public method GetRemotePort 提供对请求标头的指定成员的访问。 Public method GetRequestReason 在派生类中被重写时,返回请求的原因。 Public method GetServerName 在派生类中被重写时,返回本地服务器的名称。 Public method GetServerVariable 从与请求关联的服务器变量词典返回单个服务器变量。 Public method Static GetStatusDescription 返回一个字符串,该字符串描述指定的 HTTP 状态代码的名称。 Public method GetTotalEntityBodyLength 获取整个 HTTP 请求正文的长度。 Public method GetType  获取当前实例的 Type。 (从 Object 继承。) Public method GetUnknownRequestHeader 返回非标准的 HTTP 请求标头值。 Public method GetUnknownRequestHeaders 获取所有非标准的 HTTP 标头的名称/值对。 Public method GetUriPath 返回请求的 URI 的虚拟路径。 Public method GetUrlContextID 当在派生类中被重写时,返回当前连接的上下文 ID。 Public method GetUserToken 在派生类中被重写时,返回客户端的模拟标记。 Public method GetVirtualPathToken 获取请求虚拟路径的模拟标记。 Public method HasEntityBody 返回一个值,该值指示请求是否包含正文数据。 Public method HeadersSent 返回一个值,该值指示是否已为当前的请求将 HTTP 响应标头发送到客户端。 Public method IsClientConnected 返回一个值,该值指示客户端连接是否仍处于活动状态。 Public method IsEntireEntityBodyIsPreloaded 返回一个值,该值指示是否所有请求数据都可用,以及是否不需要对客户端进行进一步读取。 Public method IsSecure 返回一个指示连接是否使用 SSL 的值。 Public method MapPath 返回与指定虚拟路径相对应的物理路径。 Public method ReadEntityBody 已重载。 已重载。读取客户端的请求数据(在尚未预加载时)。 Public method Static ReferenceEquals  确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。) Public method SendCalculatedContentLength 将 Content-LengthHTTP 标头添加到响应。 Public method SendKnownResponseHeader 将标准 HTTP 标头添加到响应。 Public method SendResponseFromFile 已重载。 将文件的内容添加到响应。 Public method SendResponseFromMemory 已重载。 将内存块的内容添加到响应。 Public method SendStatus 指定响应的 HTTP 状态代码和状态说明;例如 SendStatus(200, "Ok")。 Public method SendUnknownResponseHeader 将非标准 HTTP 标头添加到响应。 Public method SetEndOfSendNotification 在发送所有响应数据后注册可选通知。 Public method 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协议标头类型的简要说明,希望能够对大家有些帮助:

Public field Static HeaderAccept 指定 AcceptHTTP 标头的索引号。  int 20   指定接受方所能接受的相应的媒体类 型以及相关参数. Public field Static HeaderAcceptCharset 指定 Accept-CharsetHTTP 标头的索引号。int 21  指定接受方所能接受的相应的字符集以及 相关参数. Public field Static HeaderAcceptEncoding 指定 Accept-EncodingHTTP 标头的索引号。int 22  指定接受方所能接受的HTTP请求的编码或 压缩类型以及参数,"gzip" 或者 "compress"格式优先. Public field Static HeaderAcceptLanguage 指定 Accept-LanguageHTTP 标头的索引号。int 23  指定接受方所能接受的语言种类以及相关 参数. Public field Static HeaderAcceptRanges 指定 Accept-RangesHTTP 标头的索引号。int 20  指定接受方是否接受带请求范围的HTTP请求 ,比如设置Accept-Ranges: bytes,也就是指明接受方可以根据偏移单位向量(以bytes为单位)来指定接收范围. Public field Static HeaderAge 指定 AgeHTTP 标头的索引号。int 21  划定某响应自原始服务器产生之时起所经历的时间长度 ,以秒为单位,主要用于cache,如果该HTTP响应的生命大于划定的时间长度,则该HTTP响应就是不"新鲜"(Not Fresh)的. Public field Static HeaderAllow 指定 AllowHTTP 标头的索引号。int 10  定义一个位于请求URI中的资源所支持的HTTP方法列 表,如GET, HEAD, PUT,服务器不一定要支持这些方法,但必须返回一个所支持的方法列表.
Public field Static HeaderAuthorization 指定 AuthorizationHTTP 标头的索引号。int 24  指定访问权(当用户需要划定自己所拥有的 资源的使用权时)并以在HTTP请求标头增加授权标头域的形式限定自己的资源使用权. Public field Static HeaderCacheControl 表示 HTTPCache-ControlHTTP 标头的索引。int 0  用来定义缓存行为方式的通用标头. Public field Static HeaderConnection 指定 ConnectionHTTP 标头的索引号。int 1  Public field Static HeaderContentEncoding 指定 Content-EncodingHTTP 标头的索引号。int 13 Public field Static HeaderContentLanguage 指定 Content-LanguageHTTP 标头的索引号。int 14 Public field Static HeaderContentLength 指定 Content-LengthHTTP 标头的索引号。int 11 Public field Static HeaderContentLocation 指定 Content-LocationHTTP 标头的索引号。int 15 Public field Static HeaderContentMd5 指定 Content-MD5HTTP 标头的索引号。int 16 Public field Static HeaderContentRange 指定 Content-RangeHTTP 标头的索引号。int 17 Public field Static HeaderContentType 指定 Content-TypeHTTP 标头的索引号。int 12 Public field Static HeaderCookie 指定 CookieHTTP 标头的索引号。int 25 Public field Static HeaderDate 指定 DateHTTP 标头的索引号。int 2 Public field Static HeaderEtag 指定 ETagHTTP 标头的索引号。int 22 Public field Static HeaderExpect 指定 ExceptHTTP 标头的索引号。int 26 Public field Static HeaderExpires 指定 ExpiresHTTP 标头的索引号。int 18 Public field Static HeaderFrom 指定 FromHTTP 标头的索引号。int 27 Public field Static HeaderHost 指定 HostHTTP 标头的索引号。int 28 Public field Static HeaderIfMatch 指定 If-MatchHTTP 标头的索引号。int 29 Public field Static HeaderIfModifiedSince 指定 If-Modified-SinceHTTP 标头的索引号。int 30 Public field Static HeaderIfNoneMatch 指定 If-None-MatchHTTP 标头的索引号。int 31 Public field Static HeaderIfRange 指定 If-RangeHTTP 标头的索引号。int 32 Public field Static HeaderIfUnmodifiedSince 指定 If-Unmodified-SinceHTTP 标头的索引号。int 33 Public field Static HeaderKeepAlive 指定 Keep-AliveHTTP 标头的索引号。int 3 Public field Static HeaderLastModified 指定 Last-ModifiedHTTP 标头的索引号。int 19 Public field Static HeaderLocation 指定 LocationHTTP 标头的索引号。int 23 Public field Static HeaderMaxForwards 指定 Max-ForwardsHTTP 标头的索引号。int 34 Public field Static HeaderPragma 指定 PragmaHTTP 标头的索引号。int 4 Public field Static HeaderProxyAuthenticate 指定 Proxy-AuthenticateHTTP 标头的索引号。int 24 Public field Static HeaderProxyAuthorization 指定 Proxy-AuthorizationHTTP 标头的索引号。int 35 Public field Static HeaderRange 指定 RangeHTTP 标头的索引号。int 37 Public field Static HeaderReferer 指定 RefererHTTP 标头的索引号。int 36 Public field Static HeaderRetryAfter 指定 Retry-AfterHTTP 标头的索引号。int 25 Public field Static HeaderServer 指定 ServerHTTP 标头的索引号。int 26 Public field Static HeaderSetCookie 指定 Set-CookieHTTP 标头的索引号。int 27 Public field Static HeaderTe 指定 TEHTTP 标头的索引号。int 38 Public field Static HeaderTrailer 指定 TrailerHTTP 标头的索引号。int 5 Public field Static HeaderTransferEncoding 指定 Transfer-EncodingHTTP 标头的索引号。int 6 Public field Static HeaderUpgrade 指定 UpgradeHTTP 标头的索引号。int 7 Public field Static HeaderUserAgent 指定 User-AgentHTTP 标头的索引号。int 39 Public field Static HeaderVary 指定 VaryHTTP 标头的索引号。int 28 Public field Static HeaderVia 指定 ViaHTTP 标头的索引号。int 8 Public field Static HeaderWarning 指定 WarningHTTP 标头的索引号。int 9 Public field Static HeaderWwwAuthenticate 指定 WWW-AuthenticateHTTP 标头的索引号。int 29 Public field Static ReasonCachePolicy 指定请求的原因。int 2 Public field Static ReasonCacheSecurity 指定请求的原因。int 3 Public field Static ReasonClientDisconnect 指定请求的原因。int 4 Public field Static ReasonDefault 指定请求的原因。默认值为 ReasonResponseCacheMiss。int 0 Public field Static ReasonFileHandleCacheMiss 指定请求的原因。int 1 Public field Static ReasonResponseCacheMiss 指定请求的原因。int 0 Public field Static RequestHeaderMaximum 指定 MaximumHTTP 请求标头的索引号。int 40 Public field Static ResponseHeaderMaximum 指定 MaximumHTTP 响应标头的索引号。int 30

 

    未完待续................

 

原创粉丝点击