Uri

Todo aquel que ha trabajado con ASP.NET sabe que sus funcionalidades tienden al infinito.

Un día te acuestas habiendo resuelto un problemilla complejo y al día siguiente te das cuenta de que ASP.NET ya lo tenía hecho...

Una de esas "cosas" es la clase Uri. Resumiré el artículo en una simple frase: siempre que tengais que trabajar con Urls, debéis utilizar la clase Uri.

La clase Uri tiene un montón de funcionalidades relacionadas con el correcto trato de las urls (entendidas como cadenas de texto). Probablemente, antes de conocer la clase Uri hayais fabricado alguna de estas funcionalidades por vuestra cuenta... y la clase Uri no sólo tienes esas funcionalidades sino que las corrige y amplia.

Pero vale ya de tanto "Uri", "Uri" y vayamos a la práctica, que es lo importante. De las muchos métodos y propiedades que tiene la clase Uri, voy a destacar sólo unos pocos, los que yo considero más significativos.


Request.Url
Lo más destacable es quizás que desde nuestras páginas podemos recibir una instancia Uri de la url en la que nos encontramos. Por tanto, sin más que hacer...

    Uri url = Request.Url;

... tenemos un buen ejemplo con el que trabajar. A partir de ahora vamos a suponer que nos encontramos insertando un mensaje en el foro de principiantes de www.es-asp.net, cuya Url es "http://www.es-asp.net/Foro/insertar.aspx?IdCabeza=0&IdForo=principiantes"

AbsoluteUri
Esta propiedad devuelve el string completo de la url con la que estamos trabajando, en nuestro caso url.AbsoluteUri devolvería "http://www.es-asp.net/Foro/insertar.aspx?IdCabeza=0&IdForo=principiantes"

Authority
Recoge el nombre del dominio o la ip, seguida del puerto (si es que lo tiene). En nuestro caso url.Authority es "www.es-asp.net"

LocalPath
Como su propio nombre indica, nos devuelve el Path local dentro del website en que estamos. Es importante reseñar que no se incluye el querystring. Para nuestro ejemplo url.LocalPath es "/Foro/insertar.aspx".

Query
Nos devuelve el QueryString de la url, en caso de que lo tenga. Para los que han trabajado previamente con este parámetro, sabrán apreciar que, en caso de que haya QueryString, la cadena comienza con el caracter '?', por lo que nos nos hemos de preocupar en añadirlo nosotros. Para nuestro ejemplo, url.Query es "?IdCabeza=0&IdForo=principiantes".

IsAbsoluteUri
Cambiando un poco de tercio, la clase Uri permite que sus Urls constructoras sean absolutas o relativas, entendiendo por relativas el que no tengan el nombre del dominio (por ejemplo "../imagenes" o "/foro"). Está claro que nuestro ejemplo se trata de una Url absoluta, por tanto esta propiedad devolverá true.

Propiedades estáticas de Uri
Además de las instancias que devuelve Uri, ésta tiene también propiedades estáticas muy útiles que podemos acceder. Por ejemplo, tenemos "IsWellFormedUriString", que indica si una Url está bien formada o no. Hay que darle los parámetros, el primero un string correspondiente a la url con la que queremos trabajar y el segundo es un enumerador que indica si la url es absoluta, estática o cualquiera de las dos.

Usando nuestro ejemplo:
    1.- Uri.IsWellFormedUriString(url.AbsolutePath, UriKind.Absolute); // Será true
    2.- Uri.IsWellFormedUriString(url.AbsolutePath, UriKind.Relative);  // Será false
    3.- Uri.IsWellFormedUriString(url.LocalPath, UriKind.Absolute);  // Será false

Otras propiedades estáticas interesantes son las que definen el delimitador de esquema (siempre valdrá "://"), así como un montón de esquemas típicos ("http", "ftp", "https", y hasta 8 más).

Así pues, podríamos crear nosotros mismos una Url con esto:

        string miUrl = Uri.SchemeDelimiter + Uri.UriSchemeHttp + "www.es-asp.net"; // http://www.es-asp.net


Conclusión
Como veréis tan sencillo que hasta explicarlo resulta raro

La clase Uri no termina aquí, y como siempre, os emplazo a la documentación oficial para enteraros de más: Uri en MSDN