HttpRequest Clase

Definición

Permite a ASP.NET leer los valores HTTP enviados por un cliente durante una solicitud web.

public ref class HttpRequest sealed
public sealed class HttpRequest
type HttpRequest = class
Public NotInheritable Class HttpRequest
Herencia
HttpRequest

Ejemplos

En los ejemplos siguientes se obtiene acceso a la HttpRequest instancia de la solicitud actual mediante la Request propiedad de la Page clase .

Puede usar la sintaxis simplificada para acceder a los datos de las QueryStringcolecciones , Form, Cookieso ServerVariables . Puede escribir Request["key"].

En el primer ejemplo se muestra cómo recuperar un valor de cadena de consulta al cargar una página.

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

En el ejemplo siguiente se muestra cómo comprobar si la solicitud está autenticada y recuperar la dirección URL sin procesar.

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

Hay disponible un proyecto de sitio web Visual Studio con código fuente para acompañar este tema: Descargar.

En este ejemplo se usa la StreamWriter clase para escribir los valores de varias HttpRequest propiedades de clase en un archivo. En el caso de las propiedades que son de tipo cadena, los valores están codificados en HTML a medida que se escriben en el archivo. Las propiedades que representan una colección se recorren en bucle y cada par clave-valor que contienen se escribe en el archivo.

Importante

Este ejemplo tiene un cuadro de texto que acepta datos proporcionados por el usuario, lo que puede suponer una amenaza para la seguridad. De forma predeterminada, ASP.NET Web Pages valida que los datos proporcionados por el usuario no incluyen elementos HTML ni de script. Para más información, consulte Información general sobre los ataques mediante scripts.

<%@ 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>

Comentarios

Los métodos y propiedades de la HttpRequest clase se exponen a través de las propiedades de las HttpApplicationRequest clases , HttpContext, Pagey UserControl .

Para acceder a los datos de las QueryStringcolecciones , Form, Cookieso ServerVariables , puede escribir Request["key"], como se muestra en el ejemplo de la QueryString propiedad .

Nota

La compatibilidad con Unicode para HttpRequest los miembros de clase requiere iiS versión 6.0 o posterior.

Constructores

HttpRequest(String, String, String)

Inicializa un objeto HttpRequest.

Propiedades

AcceptTypes

Obtiene una matriz de cadenas de tipos accept MIME admitidos por el cliente.

AnonymousID

Obtiene el identificador anónimo del usuario, si lo hay.

ApplicationPath

Obtiene la ruta de acceso a la raíz virtual de la aplicación ASP.NET en el servidor.

AppRelativeCurrentExecutionFilePath

Obtiene la ruta de acceso virtual de la raíz de la aplicación y la convierte en relativa mediante la tilde (~) para la raíz de la aplicación (como en "~/page.aspx").

Browser

Obtiene o establece información acerca de las capacidades del explorador del cliente que realiza la solicitud.

ClientCertificate

Obtiene el certificado de seguridad del cliente para la solicitud actual.

ContentEncoding

Obtiene o establece el juego de caracteres del cuerpo de la entidad.

ContentLength

Especifica la longitud del contenido enviado por el cliente, en bytes.

ContentType

Obtiene o establece el tipo de contenido MIME de la solicitud entrante.

Cookies

Obtiene una colección de cookies enviada por el cliente.

CurrentExecutionFilePath

Obtiene la ruta de acceso virtual de la solicitud actual.

CurrentExecutionFilePathExtension

Obtiene la extensión del nombre de archivo que se especifica en la propiedad CurrentExecutionFilePath.

FilePath

Obtiene la ruta de acceso virtual de la solicitud actual.

Files

Obtiene la colección de archivos cargada por el cliente, en formato MIME de varias partes.

Filter

Obtiene o establece el filtro que se usará al leer el flujo de entrada actual.

Form

Obtiene una colección de variables de formulario.

Headers

Obtiene una colección de encabezados HTTP.

HttpChannelBinding

Obtiene el objeto ChannelBinding de la instancia de HttpWorkerRequest actual.

HttpMethod

Obtiene el método de transferencia de datos HTTP (como GET, POST o HEAD) que usa el cliente.

InputStream

Obtiene el contenido del cuerpo de la entidad HTTP entrante.

IsAuthenticated

Obtiene un valor que indica si la solicitud se ha autenticado.

IsLocal

Obtiene un valor que indica si la solicitud es del equipo local.

IsSecureConnection

Obtiene un valor que indica si la conexión HTTP utiliza sockets seguros, es decir, HTTPS.

Item[String]

Obtiene el objeto especificado de las colecciones QueryString, Form, Cookies o ServerVariables

LogonUserIdentity

Obtiene el tipo WindowsIdentity del usuario actual.

Params

Obtiene una colección combinada de elementos QueryString, Form, Cookies y ServerVariables.

Path

Obtiene la ruta de acceso virtual de la solicitud actual.

PathInfo

Obtiene la información adicional de ruta de acceso de un recurso con una extensión de dirección URL.

PhysicalApplicationPath

Obtiene la ruta de acceso al sistema de archivos físico del directorio raíz de la aplicación de servidor que se está ejecutando.

PhysicalPath

Obtiene la ruta de acceso al sistema de archivos físico correspondiente a la dirección URL solicitada.

QueryString

Obtiene la colección de variables de tipo cadena de consulta HTTP.

RawUrl

Obtiene la dirección URL sin procesar de la solicitud actual.

ReadEntityBodyMode

Obtiene un valor que indica si se ha leído el cuerpo de la entidad de la solicitud y, si es así, cómo se ha leído.

RequestContext

Obtiene la instancia de RequestContext de la solicitud actual.

RequestType

Obtiene o establece el método de transferencia de datos HTTP (GET o POST) que usa el cliente.

ServerVariables

Obtiene una colección de variables de servidor web.

TimedOutToken

Obtiene un objeto CancellationToken que se desencadena cuando una solicitud consume el tiempo de espera.

TlsTokenBindingInfo

Obtiene la información de enlace del token TLS. La propiedad permite que las aplicaciones recuperen información de token de solicitudes HTTP entrantes para la autenticación mejorada.

TotalBytes

Obtiene el número de bytes del flujo de entrada actual.

Unvalidated

Obtiene los valores de solicitud HTTP sin desencadenar la validación de la solicitud.

Url

Obtiene información sobre la dirección URL de la solicitud actual.

UrlReferrer

Obtiene información sobre la dirección URL de la solicitud anterior del cliente que establecía un vínculo con la dirección URL actual.

UserAgent

Obtiene la cadena de agente de usuario no procesada del explorador del cliente que se ha proporcionado. Tenga en cuenta que su valor puede ser null.

UserHostAddress

Obtiene la dirección IP del host del cliente remoto.

UserHostName

Obtiene el nombre DNS del cliente remoto.

UserLanguages

Obtiene una matriz de cadenas ordenada con las preferencias de idioma del cliente.

Métodos

Abort()

Termina de manera forzosa la conexión TCP subyacente, lo que provoca el error de cualquier E/S pendiente. Podría usar este método en respuesta a un ataque de un cliente HTTP malintencionado.

BinaryRead(Int32)

Realiza una lectura binaria de un número de bytes especificado en el flujo de entrada actual.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetBufferedInputStream()

Obtiene un objeto Stream que se puede usar para leer el cuerpo de entidad HTTP entrante.

GetBufferlessInputStream()

Obtiene un objeto Stream que se puede usar para leer el cuerpo de entidad HTTP entrante.

GetBufferlessInputStream(Boolean)

Obtiene un objeto Stream que se puede usar para leer el cuerpo de la entidad HTTP entrante y deshabilita opcionalmente el límite de longitud de la solicitud que se establece en la propiedad MaxRequestLength.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
InsertEntityBody()

Proporciona a IIS una copia del cuerpo de la entidad de solicitud HTTP.

InsertEntityBody(Byte[], Int32, Int32)

Proporciona a IIS una copia del cuerpo de la entidad de solicitud HTTP e información sobre el objeto entidad de solicitud.

MapImageCoordinates(String)

Asigna un parámetro de formulario entrante de campo de imagen a los valores de coordenada X y coordenada Y adecuados.

MapPath(String)

Asigna la ruta de acceso virtual especificada a una ruta de acceso física.

MapPath(String, String, Boolean)

Asigna la ruta de acceso virtual especificada a una ruta de acceso física.

MapRawImageCoordinates(String)

Asigna un parámetro de formulario entrante de campo de imagen a los valores de coordenadas X e Y adecuados.

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
SaveAs(String, Boolean)

Guarda una solicitud HTTP en el disco.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
ValidateInput()

Hace que se produzca la validación en las colecciones a las que se obtuvo acceso a través de las propiedades Cookies, Form y QueryString.

Se aplica a