HttpRequest Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 de 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 hace relativa mediante el uso de la notación de 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 |
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 ( |
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, String, Boolean) |
Asigna la ruta de acceso virtual especificada a una ruta de acceso física. |
MapPath(String) |
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. |