Gravatar图像无法在ASP.net网站上正确显示

时间:2018-02-22 04:27:34

标签: c# asp.net avatar gravatar

我有一个使用asp.net开发的网站,c#

在那里我制作了自己的评论系统。如果用户想发表评论,他必须输入评论,姓名和电子邮件。

enter image description here

当我加载评论时,我正在使用此代码加载gravator。

using System.Security.Cryptography;

/// Hashes an email with MD5.  Suitable for use with Gravatar profile
/// image urls
public static string HashEmailForGravatar(string email)
{
    // Create a new instance of the MD5CryptoServiceProvider object.  
    MD5 md5Hasher = MD5.Create();

    // Convert the input string to a byte array and compute the hash.  
    byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(email));

    // Create a new Stringbuilder to collect the bytes  
    // and create a string.  
    StringBuilder sBuilder = new StringBuilder();

    // Loop through each byte of the hashed data  
    // and format each one as a hexadecimal string.  
    for(int i = 0; i < data.Length; i++)
    {
        sBuilder.Append(data[i].ToString("x2"));
    }

    return sBuilder.ToString();  // Return the hexadecimal string. 
}

然后使用此代码分配

//  Compute the hash
string hash = HashEmailForGravatar(email);

//  Assemble the url and return
return string.Format("http://www.gravatar.com/avatar/{0}", hash);

但我得到的只是这个默认的蓝色图像。 enter image description here

我在这里解释辅助部分 这是ASPX页面上的元素

 <asp:Image runat="server" ImageUrl='<%#Eval("GravatorURL")%>' />

这是我为该Eval部分赋予价值的地方

DataTable dt = new DataTable();
                dt = objBlog_BLL.GetArticleComment(articleID);
                dt.Columns.Add("GravatorURL", typeof(String));
                foreach (DataRow dr in dt.Rows)
                {
                    string CommenterEmail = dr["author_email"].ToString();
                    string hash = HashEmailForGravatar(CommenterEmail);

                    string myGravatar = string.Format("//www.gravatar.com/avatar/{0}?size=50", hash);
                    dr["GravatorURL"] = myGravatar;
                }
                dListComment.DataSource = dt;
                dListComment.DataBind();

这是客户端的HTML标记呈现

<img src="//www.gravatar.com/avatar/4F3FFEF1297E4BF2F746007DFCD36FA5?size=50">
  

我使用.LoverCase()降低了这个结果。但结果却是   相同。

但是这个电子邮件地址有一张图片。我找到了另一个名为Avatarapi.com的网站。在那里,您可以输入电子邮件地址并检查图像。它完全有效。它还提供了一个API来执行此操作。你所要做的就是 使用此代码

<script src="https://www.avatarapi.com/js.aspx?email=your_email@gmail.com&size=128">
</script>

但问题是当你将鼠标悬停在gravator上时,他们会将URL指向他们的网站。所以我需要一个干净的方法。我的代码怎么了?

1 个答案:

答案 0 :(得分:0)

如果将代码应用于全小写的电子邮件地址,那么您的代码可以很好地生成我的gravatar。我只检查了几件事:

  1. Gravatar的docs显示需要修剪的初始电子邮件地址,并在散列之前转换为小写。首先尝试将email.Trim().ToLowerInvariant()传递给GetBytes方法。
  2. 您尚未显示string.Format()生成的实际字符串。您的文化设置可能会影响字符串的表示方式(尽管不太可能)。您可以将CultureInfo.Invariant参数传递给string.Format(),或者只是切换到使用+运算符直接连接字符串。
  3. 您尚未显示在浏览器中呈现的实际HTML标记。客户端可能无法正确读取或应用服务器的响应。
  4. 更新

    根据https://www.avatarapi.com/

      

    此API使用Google提供的公开个人资料信息,通过公开的Google数据源来确定用户的姓名和个人资料图片。通过此API可提供超过10亿个配置文件图片。该API最适用于Gmail地址,但许多其他电子邮件帐户已在Google注册。

    因此,您要求制作Gravatar图片,但是您认为自己没有获得有效的结果,因为您将结果与使用Google个人资料图片的服务进行比较,并且仅作为备份使用gravatar选项。