Gravatar helper para ASP.NET MVC

Para quien no lo conozca, el servicio de Gravatar nos da la posibilidad de poder asociar una imagen a un correo electrónico. De esta manera podremos personalizar nuestros comentarios en todos aquellos blogs, forums, etcétera que soporten el servicio de Gravatar, el cual es muy usado por los usuarios de WordPress entre otros. De hecho, existe la posibilidad de hacer uso del servicio incluso en nuestras propias aplicaciones.

En realidad, es bastante simple: Las URLs que nos facilitan las imágenes de nuestra cuenta en Gravatar no es más que el valor hash de nuestro correo electrónico. Lo único que debemos de tener en cuenta para obtener el hash correcto son 3 puntos importantes:

  1. Eliminar los espacios que pudieran existir en el correo electrónico introducido por el usuario.
  2. Todos los caractéres deben estar en minúsculas.
  3. Nuestro hash debe de obtenerse a través del algoritmo MD5.

Un ejemplo válido para ASP.NET MVC podría ser el siguiente:

using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web.Mvc;

namespace GravatarMVC.Helpers
{
public static class CustosHelpers
{
public static MvcHtmlString Gravatar(this HtmlHelper htmlHelper, string email)
{
var md5 = new MD5CryptoServiceProvider();
var bytes = Encoding.ASCII.GetBytes(email.ToLower().Trim());
bytes = md5.ComputeHash(bytes);
var result = bytes.Aggregate(string.Empty, (current, b) => current + b.ToString("x2"));

var gravatarLink = new TagBuilder("a");
gravatarLink.Attributes["href"] = string.Format("http://www.gravatar.com/{0}", result);

var image = new TagBuilder("img");
image.Attributes["src"] = string.Format("http://www.gravatar.com/avatar/{0}", result);

gravatarLink.InnerHtml = image.ToString();

return MvcHtmlString.Create(gravatarLink.ToString());
}
}
}

Como podemos ver, lo único que necesitamos es recuperar el hash utilizando la clase MD5CryptoServiceProvider y posteriormente concatenamos cada valor de cada uno de los bytes en formato hexadecimal. Una vez almacenado cada uno de los valores en la variable result, asignamos la misma al final de la URL que solicitará a Gravatar la imagen (http://www.gravatar.com/avatar/HASH) o bien obtendremos la dirección del perfil asociada a ese correo electronico (http://www.gravatar.com/HASH).

En este simple helper para ASP.NET MVC lo único que he implementado es un enlace que contiene a su vez la imagen de Gravatar. Si pulsamos sobre él nos llevará al perfil del usuario:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<%@ Import Namespace="GravatarMVC.Helpers" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Home Page
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>
<%: ViewData["Message"] %></h2>
<p>
To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">
http://asp.net/mvc</a>.
</p>
<p>
This is my Gravatar image
<%:Html.Gravatar("your@email.com") %>
</p>
</asp:Content>

Espero que sea de utilidad 🙂

¡Saludos!

2 comentarios en “Gravatar helper para ASP.NET MVC”

  1. Para complementar tu ejemplo, en un simple webform (sin MVC) se puede usar el control HyperLink para lo mismo:

    HyperLink hlink = new HyperLink();
    hlink.NavigateUrl = @”http://www.gravatar.com/” + result;
    hlink.ImageUrl = @”http://www.gravatar.com/avatar/” + result;
    this.Controls.Add( hlink );

    ¡Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *