2010-08-10 18 views

Respuesta

13

Request["id"] obtiene un valor de la QueryString, Form, Cookies o ServerVariables colecciones. El orden en que se buscan no se especifica en la documentación, pero cuando se mira el código fuente verá que es el orden en que se mencionan.

Así que si sabe dónde reside su variable, lo que generalmente hace, es mejor usar la opción más específica.

+0

-1 de mí, por ahora, ya que la documentación * no * especificar el orden en el que se accede a las colecciones .Si los documentos coinciden con la implementación, es pura suerte, como noté en mi respuesta, podría cambiar. Quite el "en este orden" y estaré más que feliz de eliminar el -1 =) – Rob

+0

-1 eliminado, hay otro poco de documentación en http://msdn.microsoft.com/en-us/library/ms524948 % 28VS.90% 29.aspx (gracias a @John por su respuesta que lo señala) que indica que las colecciones se buscan en un orden específico. Sería bueno si MS menciona que en la documentación que es específicamente para Request.Item, eh! : -/ – Rob

+1

Quité la parte 'en este orden' porque esto no está documentado. Sin embargo, mirando el código fuente, verá que usa el orden especificado. Pero tienes razón, este es un detalle de implementación :) –

1

Request.QueryString["id"] devolverá el valor de un elemento en la cadena de consulta que tiene una clave de id, mientras que Request["id"] devolverá un elemento de una de Request.QueryString, Request.Form, Request.ServerVariables, o Request.Cookies.

Vale la pena mencionar que el documentation para Request.Item (que es lo que realmente está accediendo cuando se llama a Request["id"]) hace no especificar el orden en el que se buscará en las colecciones, por lo que en teoría podría recibir un resultado diferente dependiendo en qué versión de asp.net se está ejecutando.

Si sabe que el valor que desea está en su cadena de consulta, siempre es mejor usar Request.QueryString["id"] para acceder a ella, en lugar de Request["id"].

1

Según la documentation la HttpRequest indexador

la cadena de consulta, Formulario, miembro de Colección de las galletas, o ServerVariables especificado en el parámetro clave.

Preferiría usar Request.QueryString["id"] ya que es más explícito de dónde viene el valor.

1

Request.QueryString ["id"] examina la colección aprobada por QueryString. Request.Item ["id"] examina todas las colecciones (QueryString, Form, Cookies o ServerVariables). Por lo tanto, la propiedad QueryString debe preferirse cuando sea posible porque es más pequeña.

3

La colección de solicitud es un superconjunto de QueryString, junto con algunos datos más relacionados con la solicitud actual.

por lo que para "mejor" - Le aconsejo que sea preciso y explícito (es decir, use QueryString) para evitar el factor sorpresa, cuando obtiene resultados inesperados solo para darse cuenta de que utilizó una clave para la cual solicitud no proporcionó un valor de cadena de consulta, pero existe en alguna otra colección.

+0

+1 para responder a toda la pregunta. Ciertamente, he visto que el código se confunde cuando algo termina por leerse de las cookies en lugar de querystring. –

1

Según Reflector.Net, Solicitud [ "id"] se define como:

public string this[string key] 
{ 
    get 
    { 
     string str = this.QueryString[key]; 
     if (str != null) 
     { 
      return str; 
     } 
     str = this.Form[key]; 
     if (str != null) 
     { 
      return str; 
     } 
     HttpCookie cookie = this.Cookies[key]; 
     if (cookie != null) 
     { 
      return cookie.Value; 
     } 
     str = this.ServerVariables[key]; 
     if (str != null) 
     { 
      return str; 
     } 
     return null; 
    } 
} 
+0

Está confiando en un detalle de implementación aquí ... – Rob

+0

@Rob En lugar de basarse en la documentación. ¿En cuál confiarías? :) – bzlm

+0

@bzlm, el orden de búsqueda es * indocumentado *, por lo tanto, confiar en él no es aconsejable en el mejor de los casos, potencialmente catastrófico en el peor. Si algo no está documentado, debes asumir que * está sujeto a cambios en cualquier punto *. – Rob

Cuestiones relacionadas