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


HttpRequest Класс

Определение

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

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

Примеры

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

Для доступа к данным из коллекций CookiesFormили 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

В этом примере класс используется 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 свойства HttpApplication, HttpContextPageи UserControl классы.

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

Замечание

Поддержка Юникода для 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

Возвращает коллекцию заголовков HTTP.

HttpChannelBinding

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

HttpMethod

Возвращает метод передачи данных HTTP (например GET, POSTили HEAD), используемый клиентом.

InputStream

Возвращает содержимое входящего текста сущности HTTP.

IsAuthenticated

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

IsLocal

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

IsSecureConnection

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

Item[String]

Возвращает указанный объект из коллекций Formили CookiesServerVariables коллекцийQueryString.

LogonUserIdentity

WindowsIdentity Возвращает тип текущего пользователя.

Params

Возвращает объединенную коллекцию QueryStringэлементов Formи CookiesServerVariables элементов.

Path

Возвращает виртуальный путь текущего запроса.

PathInfo

Возвращает дополнительные сведения о пути для ресурса с расширением URL-адреса.

PhysicalApplicationPath

Возвращает путь к физической файловой системе корневого каталога приложения сервера.

PhysicalPath

Возвращает путь к физической файловой системе, соответствующий запрошенным URL-адресу.

QueryString

Возвращает коллекцию переменных строки запроса HTTP.

RawUrl

Возвращает необработанный URL-адрес текущего запроса.

ReadEntityBodyMode

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

RequestContext

RequestContext Возвращает экземпляр текущего запроса.

RequestType

Возвращает или задает метод передачи данных HTTP (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 Возвращает объект, который можно использовать для чтения входящего текста сущности HTTP.

GetBufferlessInputStream()

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

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, String, Boolean)

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

MapPath(String)

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

MapRawImageCoordinates(String)

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

MemberwiseClone()

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

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

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

ToString()

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

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

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

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