2008-10-19 19 views
5

Lo estoy revisando y parece ser que está fundamentalmente roto.¿Hay alguna razón para usar System.Uri?

  • Solo 5 métodos de instancias no están marcados como obsoletos.
  • No parece haber ningún modo incorporado a las variables de cadena de consulta de análisis .
  • No hay métodos para mutar el Uri, por ejemplo, agregando una nueva variable de consulta.
  • HttpUtility trabaja en cadenas, no URIs

Entonces, ¿hay algo que es bueno para? ¿Debería realmente usar esto en lugar de solo cadenas?

Respuesta

8

Yo no diría que la clase Uri se divide fundamentalmente en absoluto. El objetivo de la clase Uri es proporcionar una representación compacta y estándar de un URI. La clase Uri encapsula toda la lógica necesaria para devolver el URI en forma canónica y para proporcionar soporte para notaciones IPV4 e IPV6, y compatibilidad con IRI.

La clase Uri no está diseñada para permitir cambiar el Uri una vez que se ha creado; si quieres ese nivel de mutabilidad deberías usar un UriBuilder en su lugar.

La ventaja de utilizar Uri (o UriBuilder) en cadenas es que se obtiene una gran cantidad de validación incorporada para garantizar que la dirección dada esté bien formada, las capacidades para hacer URIs relativos de los absolutos, etc. Básicamente, puede pensar en un Uri como un tipo de datos real, por lo que usar uno proporciona un nivel de mecanografía fuerte.

+1

Una cadena también proporciona una "representación compacta y estándar de un URI". Y la única forma de validar realmente un URI es llamar al recurso en cuestión, ya que cada recurso tiende a tener sus propias reglas. –

+0

Si está hablando de validar que existe el recurso, sí, pero la clase Uri validará que la dirección está bien formada, lo cual es diferente. Una cadena no le permite crear fácilmente URIs relativos, determinar fácilmente si el URI dado es absoluto o no, etc. –

+1

también un URI canonicalizará el URI que puede ser muy importante en algunas aplicaciones – RobV

3

Depende de lo que esté haciendo. Puedo pensar al menos en un escenario donde lo usaría, y eso es convertir las URL relativas en absolutos. Digamos, por ejemplo, que tiene algo de HTML que ha extraído de algún lugar pero que no necesariamente sabe si la URL es relativa o absoluta. Usted puede escribir su propia lógica de análisis, o se puede utilizar la clase Uri como:

Uri link = new Uri(new Uri(webSiteAddress), linkPulledFromSite); 
string absoluteUrl = link.AbsoluteUri; 

allí tendría que haber fácilmente la URL absoluta sin la preocupación. Todo solo depende de lo que esté haciendo :-)

+0

Ok, eso es un truco ingenioso. Pero realmente no justifica la clase Uri como un todo. –

0

¿Por qué todas las clases de archivos y clases web toman cadenas no validadas? Los diseñadores de .NET Framework realmente soltaron la pelota en las clases de encapsulamiento de cuerdas como esta.

Si le preocupa la verificación de sus datos de cadena, casi todas sus cadenas deben ir a algún tipo de contenedor. Sin uno, es realmente difícil determinar el estado de tu cadena. ¿Cómo está actualmente formateado? ¿Contiene caracteres inválidos? ¿Está bien lanzarlo ahora mismo?

Cuestiones relacionadas