Поделиться через


HttpRequest Класс

Определение

Позволяет ASP.NET считывать значения HTTP, отправляемые клиентом во время веб-запроса.

public ref class HttpRequest sealed
public sealed class HttpRequest
type HttpRequest = class
Public NotInheritable Class HttpRequest
Наследование
HttpRequest

Примеры

В следующих примерах доступ к экземпляру HttpRequest для текущего запроса выполняется с помощью Request свойства Page класса .

Для доступа к данным из коллекций , Form, Cookiesили ServerVariables можно использовать упрощенный QueryStringсинтаксис. Можно написать 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 свойств класса в файл. Для свойств типа string значения кодируются в формате 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 свойства HttpApplicationклассов , HttpContext, Pageи UserControl .

Для доступа к данным из коллекций , , или можно записать Request["key"], как показано в примере для QueryString свойства .ServerVariablesCookiesFormQueryString

Примечание

Для поддержки Юникода для HttpRequest членов класса требуется 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

Получает коллекцию заголовков НТТР.

HttpChannelBinding

Получает объект ChannelBinding текущего экземпляра HttpWorkerRequest.

HttpMethod

Получает метод передачи данных по протоколу НТТР (например, GET, POST или HEAD), используемый клиентом.

InputStream

Получает содержимое входящего объекта НТТР.

IsAuthenticated

Получает значение, позволяющее определить, прошел ли запрос проверку подлинности.

IsLocal

Получает значение, которое указывает, был ли запрос отправлен с локального компьютера.

IsSecureConnection

Получает значение, определяющее, используются ли сокеты безопасности (т. е. HTTPS) в соединении HTTP.

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

Получает или задает метод передачи данных по протоколу НТТР (GET или POST), используемый клиентом.

ServerVariables

Получает коллекцию переменных веб-сервера.

TimedOutToken

Получает объект CancellationToken, задействуемый при истечении времени ожидания запроса.

TlsTokenBindingInfo

Получает сведения о привязке токена TLS. Свойство позволяет приложениям извлекать сведения о токенах из входящих HTTP-запросов для расширенных возможностей аутентификации.

TotalBytes

Получает число байтов в текущем потоке входящих данных.

Unvalidated

Получает значения HTTP-запроса, не активируя его проверку.

Url

Получает сведения о URL-адресе текущего запроса.

UrlReferrer

Получает сведения о URL-адресе предыдущего запроса клиента, связанного с текущим URL-адресом.

UserAgent

Получает исходную строку пользовательского агента, переданную от клиентского браузера. Обратите внимание, что результат может иметь значение null.

UserHostAddress

Получает IP-адрес узла удаленного клиента.

UserHostName

Получает DNS-имя удаленного клиента.

UserLanguages

Получает отсортированный строковый массив языковых параметров клиента.

Методы

Abort()

Принудительно завершает основное подключение TCP, из-за чего любой ВВОД-ВЫВОД дает сбой. Этот метод можно использовать в ответ на атаку со стороны вредоносного HTTP-клиента.

BinaryRead(Int32)

Выполняет чтение двоичного кода заданного числа байтов, содержащихся в текущем потоке входящих данных.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetBufferedInputStream()

Возвращает объект Stream, который можно использовать для чтения основного текста входящего НТТР-запроса.

GetBufferlessInputStream()

Возвращает объект Stream, который можно использовать для чтения основного текста входящего НТТР-запроса.

GetBufferlessInputStream(Boolean)

Получает объект Stream, который можно использовать для чтения тела сущности входящего HTTP-запроса, дополнительно отменяя задаваемое в свойстве MaxRequestLength ограничение на длину запроса.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
InsertEntityBody()

Предоставляет службам IIS копию тела сущности HTTP-запроса.

InsertEntityBody(Byte[], Int32, Int32)

Предоставляет службам IIS копию тела сущности HTTP-запроса и сведения об объекте сущности запроса.

MapImageCoordinates(String)

Сопоставляет параметр входящей формы полей рисунков с соответствующими значениями координат X и Y.

MapPath(String)

Сопоставляет указанный виртуальный путь с физическим путем.

MapPath(String, String, Boolean)

Сопоставляет указанный виртуальный путь с физическим путем.

MapRawImageCoordinates(String)

Сопоставляет параметр входящей формы полей изображений с соответствующими значениями координат X и Y.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
SaveAs(String, Boolean)

Сохраняет HTTP-запрос на диске.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
ValidateInput()

Вызывает проверку коллекций, доступных через свойства Cookies, Form и QueryString.

Применяется к