HttpRequest 类 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
使 ASP.NET 能够读取客户端在 Web 请求期间发送的 HTTP 值。
public ref class HttpRequest sealed
	public sealed class HttpRequest
	type HttpRequest = class
	Public NotInheritable Class HttpRequest
		- 继承
 - 
				HttpRequest
 
示例
以下示例使用 Request 类的 属性访问HttpRequest当前请求的 Page 实例。
可以使用简化的语法从 QueryString、 Form、 Cookies或 ServerVariables 集合访问数据。 可以编写 Request["key"]。
第一个示例演示如何在加载页面时检索查询字符串值。
public partial class AddToCart : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string rawId = Request["ProductID"];
        int productId;
        if (!String.IsNullOrEmpty(rawId) && int.TryParse(rawId, out productId))
        {
            using (ShoppingCartActions usersShoppingCart = new ShoppingCartActions())
            {
                usersShoppingCart.AddToCart(productId);
            }
        }
        else
        {
            throw new Exception("Tried to call AddToCart.aspx without setting a ProductId.");
        }
        Response.Redirect("ShoppingCart.aspx");
    }
}
Public Class AddToCart
    Inherits Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        Dim rawId = Request("ProductID")
        Dim productId As Integer
        If Not String.IsNullOrEmpty(rawId) And Integer.TryParse(rawId, productId) Then
            Using usersShoppingCart As New ShoppingCartActions()
                usersShoppingCart.AddToCart(productId)
            End Using
        Else
            Throw New Exception("Tried to call AddToCart.aspx without setting a ProductId.")
        End If
        Response.Redirect("ShoppingCart.aspx")
    End Sub
End Class
下一个示例演示如何检查请求是否已通过身份验证并检索原始 URL。
public partial class RestrictedPage : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Request.IsAuthenticated)
        {
            var rawUrl = Request.RawUrl;
            Response.Redirect("/Account/Login?ru=" + Server.HtmlEncode(rawUrl));
        }
    }
}
Public Class RestrictedPage
    Inherits Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        If Not Request.IsAuthenticated Then
            Dim rawUrl = Request.RawUrl
            Response.Redirect("/Account/Login?ru=" + Server.HtmlEncode(rawUrl))
        End If
    End Sub
End Class
本主题附带了一个包含源代码的 Visual Studio 网站项目: 下载。
此示例使用 StreamWriter 类将多个 HttpRequest 类属性的值写入文件。 对于字符串类型的属性,值在写入文件时进行 HTML 编码。 表示集合的属性将循环访问,并且它们包含的每个键/值对都将写入文件。
重要
此示例具有一个接受用户输入的文本框,这是一个潜在的安全威胁。 默认情况下,ASP.NET 网页验证用户输入是否不包含脚本或 HTML 元素。 有关详细信息,请参阅脚本侵入概述。
<%@ Page Language="C#" %>
<%@ import Namespace="System.Threading" %>
<%@ import Namespace="System.IO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    /* NOTE: To use this sample, create a c:\temp\CS folder,
    *  add the ASP.NET account (in IIS 5.x <machinename>\ASPNET,
    *  in IIS 6.x NETWORK SERVICE), and give it write permissions
    *  to the folder.*/
    private const string INFO_DIR = @"c:\temp\CS\RequestDetails";
    public static int requestCount;
    private void Page_Load(object sender, System.EventArgs e)
    {
        // Create a variable to use when iterating
        // through the UserLanguages property.
        int langCount;
        int requestNumber = Interlocked.Increment(ref requestCount);
        // Create the file to contain information about the request.
        string strFilePath = INFO_DIR + requestNumber.ToString() + @".txt";
        StreamWriter sw = File.CreateText(strFilePath);
        try
        {
// <snippet2>
            // Write request information to the file with HTML encoding.
            sw.WriteLine(Server.HtmlEncode(DateTime.Now.ToString()));
            sw.WriteLine(Server.HtmlEncode(Request.CurrentExecutionFilePath));
            sw.WriteLine(Server.HtmlEncode(Request.ApplicationPath));
            sw.WriteLine(Server.HtmlEncode(Request.FilePath));
            sw.WriteLine(Server.HtmlEncode(Request.Path));
// </snippet2>
// <snippet3>
            // Iterate through the Form collection and write
            // the values to the file with HTML encoding.
            // String[] formArray = Request.Form.AllKeys;
            foreach (string s in Request.Form)
            {
                sw.WriteLine("Form: " + Server.HtmlEncode(s));
            }
// </snippet3>
// <snippet4>
            // Write the PathInfo property value
            // or a string if it is empty.
            if (Request.PathInfo == String.Empty)
            {
                sw.WriteLine("The PathInfo property contains no information.");
            }
            else
            {
                sw.WriteLine(Server.HtmlEncode(Request.PathInfo));
            }
// </snippet4>
// <snippet5>
            // Write request information to the file with HTML encoding.
            sw.WriteLine(Server.HtmlEncode(Request.PhysicalApplicationPath));
            sw.WriteLine(Server.HtmlEncode(Request.PhysicalPath));
            sw.WriteLine(Server.HtmlEncode(Request.RawUrl));
// </snippet5>
// <snippet6>
            // Write a message to the file dependent upon
            // the value of the TotalBytes property.
            if (Request.TotalBytes > 1000)
            {
                sw.WriteLine("The request is 1KB or greater");
            }
            else
            {
                sw.WriteLine("The request is less than 1KB");
            }
// </snippet6>
// <snippet7>
            // Write request information to the file with HTML encoding.
            sw.WriteLine(Server.HtmlEncode(Request.RequestType));
            sw.WriteLine(Server.HtmlEncode(Request.UserHostAddress));
            sw.WriteLine(Server.HtmlEncode(Request.UserHostName));
            sw.WriteLine(Server.HtmlEncode(Request.HttpMethod));
// </snippet7>
// <snippet8>
            // Iterate through the UserLanguages collection and
            // write its HTML encoded values to the file.
            for (langCount=0; langCount < Request.UserLanguages.Length; langCount++)
            {
                sw.WriteLine(@"User Language " + langCount +": " + Server.HtmlEncode(Request.UserLanguages[langCount]));
            }
// </snippet8>
       }
       finally
       {
            // Close the stream to the file.
            sw.Close();
       }
        lblInfoSent.Text = "Information about this request has been sent to a file.";
    }
    private void btnSendInfo_Click(object sender, System.EventArgs e)
    {
        lblInfoSent.Text = "Hello, " + Server.HtmlEncode(txtBoxName.Text) +
          ". You have created a new  request info file.";
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
        <p>
        </p>
        <p>
            Enter your name here:
            <asp:TextBox id="txtBoxName" runat="server"></asp:TextBox>
        </p>
        <p>
            <asp:Button id="btnSendInfo" onclick="btnSendInfo_Click" runat="server" Text="Click Here"></asp:Button>
        </p>
        <p>
            <asp:Label id="lblInfoSent" runat="server"></asp:Label>
        </p>
    </form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ import Namespace="System.Threading" %>
<%@ import Namespace="System.IO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    '  NOTE: To use this sample, create a c:\temp\CS folder,
    '  add the ASP.NET account (in IIS 5.x <machinename>\ASPNET,
    '  in IIS 6.x NETWORK SERVICE), and give it write permissions
    '  to the folder.
    Private Const INFO_DIR As String = "c:\temp\VB\RequestDetails"
    Public Shared requestCount As Integer
    Private Sub Page_Load(sender As Object, e As System.EventArgs)
        ' Create a variable to use when iterating
        ' through the UserLanguages property.
        Dim langCount As Integer
        ' Create a counter to name the file.
        Dim requestNumber As Integer = _
          Interlocked.Increment(requestCount)
        ' Create the file to contain information about the request.
        Dim strFilePath As String = INFO_DIR & requestNumber.ToString() & ".txt"
        Dim sw As StreamWriter = File.CreateText(strFilePath)
        Try
' <snippet2>
            ' Write request information to the file with HTML encoding.
            sw.WriteLine(Server.HtmlEncode(DateTime.Now.ToString()))
            sw.WriteLine(Server.HtmlEncode(Request.CurrentExecutionFilePath))
            sw.WriteLine(Server.HtmlEncode(Request.ApplicationPath))
            sw.WriteLine(Server.HtmlEncode(Request.FilePath))
            sw.WriteLine(Server.HtmlEncode(Request.Path))
' </snippet2>
' <snippet3>
            ' Iterate through the Form collection and write
            ' the values to the file with HTML encoding.
            For Each s As String In Request.Form
                sw.WriteLine("Form: " & Server.HtmlEncode(s))
            Next s
' </snippet3>
' <snippet4>
            ' Write the PathInfo property value
            ' or a string if it is empty.
            If Request.PathInfo = String.Empty Then
                sw.WriteLine("The PathInfo property contains no information.")
            Else
                sw.WriteLine(Server.HtmlEncode(Request.PathInfo))
            End If
' </snippet4>
' <snippet5>
            ' Write request information to the file with HTML encoding.
            sw.WriteLine(Server.HtmlEncode(Request.PhysicalApplicationPath))
            sw.WriteLine(Server.HtmlEncode(Request.PhysicalPath))
            sw.WriteLine(Server.HtmlEncode(Request.RawUrl))
' </snippet5>
' <snippet6>
            ' Write a message to the file dependent upon
            ' the value of the TotalBytes property.
            If Request.TotalBytes > 1000 Then
                sw.WriteLine("The request is 1KB or greater")
            Else
                sw.WriteLine("The request is less than 1KB")
            End If
' </snippet6>
' <snippet7>
            ' Write request information to the file with HTML encoding.
            sw.WriteLine(Server.HtmlEncode(Request.RequestType))
            sw.WriteLine(Server.HtmlEncode(Request.UserHostAddress))
            sw.WriteLine(Server.HtmlEncode(Request.UserHostName))
            sw.WriteLine(Server.HtmlEncode(Request.HttpMethod))
' </snippet7>
' <snippet8>
            ' Iterate through the UserLanguages collection and
            ' write its HTML encoded values to the file.
            For langCount = 0 To Request.UserLanguages.Length - 1
                sw.WriteLine("User Language " & langCount.ToString() & _
                 ": " & Server.HtmlEncode( _
                     Request.UserLanguages(langCount)))
            Next
' </snippet8>
        Finally
            ' Close the stream to the file.
            sw.Close()
        End Try
        lblInfoSent.Text = _
         "Information about this request has been sent to a file."
    End Sub 'Page_Load
    Private Sub btnSendInfo_Click(sender As Object, e As System.EventArgs)
        lblInfoSent.Text = _
         "Hello, " & Server.HtmlEncode(txtBoxName.Text) & _
          ". You have created a new  request info file."
    End Sub 'btnSendInfo_Click
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
        <p>
        </p>
        <p>
            Enter your name here:
            <asp:TextBox id="txtBoxName" runat="server"></asp:TextBox>
        </p>
        <p>
            <asp:Button id="btnSendInfo" onclick="btnSendInfo_Click" runat="server" Text="Click Here"></asp:Button>
        </p>
        <p>
            <asp:Label id="lblInfoSent" runat="server"></asp:Label>
        </p>
    </form>
</body>
</html>
	注解
类的方法HttpRequest和属性通过 Request 、HttpContext、 Page和 UserControl 类的属性HttpApplication公开。
若要访问 、 、 或 ServerVariables 集合中的数据,可以编写 Request["key"],如 属性的示例QueryStringCookies所示。 FormQueryString
注意
对类成员的 HttpRequest Unicode 支持需要 IIS 6.0 或更高版本。
构造函数
| HttpRequest(String, String, String) | 
		 初始化 HttpRequest 对象。  | 
        	
属性
| AcceptTypes | 
		 获取客户端支持的 MIME 接受类型的字符串数组。  | 
        	
| AnonymousID | 
		 获取该用户的匿名标识符(如果存在)。  | 
        	
| ApplicationPath | 
		 获取服务器上 ASP.NET 应用程序的虚拟应用程序根路径。  | 
        	
| AppRelativeCurrentExecutionFilePath | 
		 获取应用程序根目录的虚拟路径,并通过对应用程序根目录使用波形符(~)表示法,将该路径转变为相对路径(如 "~/page.aspx" 的形式)。  | 
        	
| Browser | 
		 获取或设置有关正在请求的客户端的浏览器功能的信息。  | 
        	
| ClientCertificate | 
		 获取当前请求的客户端安全证书。  | 
        	
| ContentEncoding | 
		 获取或设置实体主体的字符集。  | 
        	
| ContentLength | 
		 指定客户端发送的内容的长度(以字节为单位)。  | 
        	
| ContentType | 
		 获取或设置传入请求的 MIME 内容类型。  | 
        	
| Cookies | 
		 获取客户端发送的 cookie 的集合。  | 
        	
| CurrentExecutionFilePath | 
		 获取当前请求的虚拟路径。  | 
        	
| CurrentExecutionFilePathExtension | 
		 获取 CurrentExecutionFilePath 属性中指定的文件名的扩展名。  | 
        	
| FilePath | 
		 获取当前请求的虚拟路径。  | 
        	
| Files | 
		 获取采用多部分 MIME 格式的由客户端上载的文件的集合。  | 
        	
| Filter | 
		 获取或设置在读取当前输入流时要使用的筛选器。  | 
        	
| Form | 
		 获取窗体变量集合。  | 
        	
| Headers | 
		 获取 HTTP 头集合。  | 
        	
| HttpChannelBinding | 
		 获取当前 ChannelBinding 实例的 HttpWorkerRequest 对象。  | 
        	
| HttpMethod | 
		 获取客户端使用的 HTTP 数据传输方法(如   | 
        	
| InputStream | 
		 获取传入的 HTTP 实体主体的内容。  | 
        	
| IsAuthenticated | 
		 获取一个值,该值指示是否验证了请求。  | 
        	
| IsLocal | 
		 获取指示请求是否来自本地计算机的值。  | 
        	
| IsSecureConnection | 
		 获取一个值,指示 HTTP 连接是否使用安全套接字(即 HTTPS)。  | 
        	
| Item[String] | 
		 从 QueryString、Form、Cookies 或 ServerVariables 集合获取指定的对象。  | 
        	
| LogonUserIdentity | 
		 获取当前用户的 WindowsIdentity 类型。  | 
        	
| Params | 
		 获取 QueryString、Form、Cookies 和 ServerVariables 项的组合集合。  | 
        	
| Path | 
		 获取当前请求的虚拟路径。  | 
        	
| PathInfo | 
		 获取具有 URL 扩展名的资源的附加路径信息。  | 
        	
| PhysicalApplicationPath | 
		 获取当前正在执行的服务器应用程序的根目录的物理文件系统路径。  | 
        	
| PhysicalPath | 
		 获取与请求的 URL 相对应的物理文件系统路径。  | 
        	
| QueryString | 
		 获取 HTTP 查询字符串变量集合。  | 
        	
| RawUrl | 
		 获取当前请求的原始 URL。  | 
        	
| ReadEntityBodyMode | 
		 获取指示请求实体是否被读以及如何被读的值。  | 
        	
| RequestContext | 
		 获取当前请求的 RequestContext 实例。  | 
        	
| RequestType | 
		 获取或设置客户端使用的 HTTP 数据传输方法(  | 
        	
| ServerVariables | 
		 获取 Web 服务器变量的集合。  | 
        	
| TimedOutToken | 
		 获取请求超时时去除的 CancellationToken 对象。  | 
        	
| TlsTokenBindingInfo | 
		 获取 TLS 标记绑定信息。 此属性使应用程序可以从传入的增强身份验证的 HTTP 请求检索令牌信息。  | 
        	
| TotalBytes | 
		 获取当前输入流中的字节数。  | 
        	
| Unvalidated | 
		 获取 HTTP 请求值,不触发请求验证。  | 
        	
| Url | 
		 获取有关当前请求的 URL 的信息。  | 
        	
| UrlReferrer | 
		 获取有关客户端上次请求的 URL 的信息,该请求链接到当前的 URL。  | 
        	
| UserAgent | 
		 获取所提供的客户端浏览器的原始用户代理字符串。 请注意此字符串可能为 Null。  | 
        	
| UserHostAddress | 
		 获取远程客户端的 IP 主机地址。  | 
        	
| UserHostName | 
		 获取远程客户端的 DNS 名称。  | 
        	
| UserLanguages | 
		 获取客户端语言首选项的排序字符串数组。  | 
        	
方法
| Abort() | 
		 强制地终止基础 TCP 连接,会导致任何显著的 I/O 失败。 可使用此方法来响应恶意 HTTP 客户端的攻击。  | 
        	
| BinaryRead(Int32) | 
		 执行对当前输入流进行指定字节数的二进制读取。  | 
        	
| Equals(Object) | 
		 确定指定对象是否等于当前对象。 (继承自 Object) | 
        	
| GetBufferedInputStream() | 
		 获取一个 Stream 对象,该对象可用于读取传入的 HTTP 实体主体。  | 
        	
| GetBufferlessInputStream() | 
		 获取一个 Stream 对象,该对象可用于读取传入的 HTTP 实体主体。  | 
        	
| GetBufferlessInputStream(Boolean) | 
		 获取能被用于读取正在到来的 HTTP 实体主体的 Stream 对象,同时随意地禁止设置在 MaxRequestLength 属性中的请求长度限制。  | 
        	
| GetHashCode() | 
		 作为默认哈希函数。 (继承自 Object) | 
        	
| GetType() | 
		 获取当前实例的 Type。 (继承自 Object) | 
        	
| InsertEntityBody() | 
		 向 IIS 提供 HTTP 请求实体正文的副本。  | 
        	
| InsertEntityBody(Byte[], Int32, Int32) | 
		 向 IIS 提供 HTTP 请求实体正文的副本以及有关请求实体对象的信息。  | 
        	
| MapImageCoordinates(String) | 
		 将传入图像字段窗体参数映射为适当的 x 坐标值和 y 坐标值。  | 
        	
| MapPath(String, String, Boolean) | 
		 将指定的虚拟路径映射到物理路径。  | 
        	
| MapPath(String) | 
		 将指定的虚拟路径映射到物理路径。  | 
        	
| MapRawImageCoordinates(String) | 
		 将传入图像字段窗体参数映射为适当的 x 和 y 坐标值。  | 
        	
| MemberwiseClone() | 
		 创建当前 Object 的浅表副本。 (继承自 Object) | 
        	
| SaveAs(String, Boolean) | 
		 将 HTTP 请求保存到磁盘。  | 
        	
| ToString() | 
		 返回表示当前对象的字符串。 (继承自 Object) | 
        	
| ValidateInput() | 
		 引发对通过 Cookies 、Form 和 QueryString 属性访问的集合的验证。  |