Pues básicamente este método nos permite hacer un mapeo de un recurso entre distintas zonas, y nos devuelve la url del recurso en la zona correcta.
A continuación un ejemplo de donde podría ser útil este método, cabe mencionar que estoy acomodando el escenario de tal manera de que se puede notar la funcionalidad de este método.
Por poner un escenario básico, el siguiente:
Tenemos una web application con la url http://intranet.corp.com, que ha sido extendida a la zona de extranet en la url http://extranet.corp.com, para tener un método de autentificación distinto.
Y tenemos una lista con un campo de tipo Imagen, estos campos almacenan rutas absolutas, por lo que cuando se guarde en este campo con una imagen desde la intranet, la ruta que almacenara será más o menos así:
http://intranet.corp.com/PublishingImages/Image1.jpg
Cuando nosotros leamos la lista y construyamos nuestro HTML para que muestre la imagen en una webpart,
Existen dos escenarios posibles:
Si el usuario esta accediendo desde la zona de intranet todo irá bien, sin embargo, si el usuario ha accedido desde la zona de Extranet, se pintara el mismo HTML, porque la url se está leyendo directamente de la lista. Y cuando esto suceda, al usuario se le solicitaran las credenciales pertinentes para obtener acceso al recurso, porque este se encuentra en una zona diferente.
A fin de solucionar este escenario hipotético podemos utilizar el método SPUtility.AlternateServerUrlFromHttpRequestUrl, el cual nos permite transformar esta url por la url correcta dependiendo de la zona en que nos encontremos. Como se aprecia en el fragmento de código siguiente:
///Y con esto al crear el HTML correspondiente a la imagen, el resultado variará dependiendo de la zona en la cual nos encontramos./// Recuperacion de la lista /// ///private SPList GetList() { SPList listImages = null; using (SPSite site = new SPSite ("http://intranet.corp.com")) { using (SPWeb web = site.OpenWeb()) { listImages = web.Lists["PublishingImages"]; for (int index = 0; index < listImages.Items.Count; index++) { //url de la imagen, extraida directamente desde la lista string urlImage = listImages.Items[index]["Thumbnail"].ToString(); string correctUrl = string.Empty; //obtenemos solo la url, sin el nombre de la imagen if (urlImage.Contains(",")) { urlImage = urlImage.Split(",".ToCharArray())[0]; } if (Uri.IsWellFormedUriString(urlImage, UriKind.RelativeOrAbsolute) == true) { Uri uriImage = new Uri(urlImage); correctUrl = SPUtility.AlternateServerUrlFromHttpRequestUrl(uriImage).ToString(); } listImages.Items[index]["Thumbnail"] = correctUrl; } } } return listImages; }
Otros posibles escenarios de uso podrían ser al customizar las búsquedas, al obtener los resultados de estas, las urls de los resultados vendrán con la url de la zona default, pero con el método mencionado podemos solucionar este problema SPUtility.AlternateServerUrlFromHttpRequestUrl Method
Happy Coding!
0 comentarios:
Publicar un comentario