Gravatar 图片在 ASP.net 网站上显示不正确

Gravatar Image not displaying correctly on ASP.net website

我有一个使用 asp.net , c#

开发的网站

里面我做了自己的评论系统。如果用户想要 post 评论,他必须输入评论、姓名和电子邮件。

当我加载评论时,我正在使用这段代码来加载 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);

但我得到的只是这张默认的蓝色图像。

这里我对assining部分进行说明 这是 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">

I lowered this result by using .LoverCase() . but still the result is same.

但是这个电子邮件地址有图像。我找到了另一个名为 Avatarapi.com 的站点。在那里你可以输入电子邮件地址并查看图像。它正在全面运作。他们还提供 API 来执行此操作。你所要做的就是 使用此代码

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

但问题是,当您将鼠标悬停在引力器上时,他们会将 URL 指向他们的站点。所以我需要一个干净的方法。我的代码有什么问题?

如果将代码应用于 all-lowercase 电子邮件地址,则您的代码可以很好地生成我的头像。我只检查几件事:

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

更新

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

This API uses public profile information provided by Google, via a publicly exposed Google data source to determine the name and profile image of the user. There are over 1 billion profile pics available via this API. The API works best with gmail addresses, but many other email accounts are registered with Google.

所以你问的是关于生成 Gravatar 图片的问题,但你认为你没有得到有效的结果,因为你将你的结果与使用 Google 个人资料图片的服务进行比较,并且只会失败回到 Gravatar 作为备份选项。