對(duì)象化的Http和請(qǐng)求對(duì)象HttpRequest

在面向?qū)ο蟮恼Z(yǔ)言中,有種“萬(wàn)物皆對(duì)象”的說(shuō)法。在上篇文章中介紹了HttpRuntime類,在該類收到請(qǐng)求之后,立即通過(guò)HttpWorkerRequest工作者對(duì)象對(duì)傳遞的參數(shù)進(jìn)行分析和分解,創(chuàng)建方便網(wǎng)站應(yīng)用程序處理的對(duì)象。與此相關(guān)的對(duì)象主要有,請(qǐng)求和響應(yīng)兩個(gè)對(duì)象。即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

對(duì)于每一個(gè)請(qǐng)求參數(shù),HttpRuntime將創(chuàng)建一個(gè)類型為HttpRequest的對(duì)象。

這個(gè)類定義了大量的屬性,用于表示關(guān)于Http請(qǐng)求的參數(shù)。這些參數(shù)來(lái)源于工作者對(duì)象HttpWorkerRequest,但HttpRequest提供了更加簡(jiǎn)便的方式。

Http的請(qǐng)求消息包括三部分,分別是:請(qǐng)求行,請(qǐng)求頭,請(qǐng)求體。

下面看一下HttpRequest的常見(jiàn)屬性。

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();
            //請(qǐng)求的類型,get或者post,可讀寫
            sb.AppendFormat("RequestType:{0}<br/>", Request.RequestType);
            //Httpq請(qǐng)求的方法,get,post或者h(yuǎn)ead,只讀
            sb.AppendFormat("HttpMethod:{0}<br/>", Request.HttpMethod);
            //通過(guò)工作者對(duì)象HttpWorkerRequest獲取的請(qǐng)求原始字符串形式的Url地址
            sb.AppendFormat("RawUrl:{0}<br/>", Request.RawUrl);
            //System.Uri類型的請(qǐng)求地址
            sb.AppendFormat("Url:{0}<br/>", Request.Url);
            //取得導(dǎo)致當(dāng)前請(qǐng)求的上一個(gè)地址
            sb.AppendFormat(":{0}<br/>", Request.UrlReferrer);
            //請(qǐng)求的虛擬路徑,不包含請(qǐng)求參數(shù)信息
            sb.AppendFormat("FilePath:{0}<br/>", Request.FilePath);
            //請(qǐng)求的虛擬路徑,通常情況下,相當(dāng)于FilePath,當(dāng)通過(guò)Server.Execute執(zhí)行的時(shí)候,F(xiàn)ilePath不變,而CurrentExecutionFilePath表示原來(lái)的虛擬路徑。
            sb.AppendFormat("CurrentExecutionFilePath:{0}<br/>", Request.CurrentExecutionFilePath);
            //請(qǐng)求的虛擬路徑,包含請(qǐng)求參數(shù)信息
            sb.AppendFormat("Path:{0}<br/>", Request.Path);
            //yi~開頭的相對(duì)虛擬路徑
            sb.AppendFormat("AppRelativeCurrentExecutionFilePath:{0}<br/>", Request.AppRelativeCurrentExecutionFilePath);
            //web應(yīng)用程序所在的文件系統(tǒng)的目錄
            sb.AppendFormat("PhysicalApplicationPath:{0}<br/>", Request.PhysicalApplicationPath);
            //當(dāng)前請(qǐng)求虛擬路徑所對(duì)應(yīng)的文件系統(tǒng)路徑
            sb.AppendFormat("PhysicalPath:{0}<br/>", Request.PhysicalPath);
            //取得url請(qǐng)求參數(shù) 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));
            //通過(guò)form表單提交的參數(shù) NameValueCollection類型
            foreach (string item in Request.Form.Keys)
            {
                sb.AppendFormat("Form:Name={0},value={1}<br/>", item, Request.Form[item]);
            }
            //請(qǐng)求頭中的參數(shù)
            foreach (string item in Request.Headers.Keys)
            {
                sb.AppendFormat("Headers:Name={0},value={1}<br/>", item, Request.Headers[item]);
            }
            //請(qǐng)求中的cookies
            foreach (string item in Request.Cookies.Keys)
            {
                sb.AppendFormat("Cookies:Name={0},value={1}<br/>", item, Request.Cookies[item]);
            }
            //web服務(wù)器提供的參數(shù)
            //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);
            }
            //提供統(tǒng)一的方法來(lái)訪問(wèn) QueryString,F(xiàn)orm,Cookies,ServerVariables中的參數(shù)
            foreach (string item in Request.Params.Keys)
            {
                sb.AppendFormat("Params:Name={0},value={1}<br/>", item, Request.Params[item]);
            }
            //主體部分
            //請(qǐng)求主體的編碼
            sb.AppendFormat("ContentEncoding:{0}<br/>", Request.ContentEncoding);
            //請(qǐng)求主體的長(zhǎng)度
            sb.AppendFormat("ContentLength:{0}<br/>", Request.ContentLength);
            // 請(qǐng)求主體的類型
            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);
            //客戶端語(yǔ)言
            sb.AppendFormat("UserLanguages:{0}<br/>", string.Join(",", Request.UserLanguages));

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

輸出結(jié)果

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容