【问题标题】:Gravatar Image not displaying correctly on ASP.net websiteGravatar 图像无法在 ASP.net 网站上正确显示
【发布时间】:2018-02-22 04:27:34
【问题描述】:

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

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

当我加载 cmets 时,我正在使用此代码加载 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);

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

这里我解释一下暗杀部分 这是 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 指向他们的网站。所以我需要一个干净的方法。我的代码有什么问题?

【问题讨论】:

  • 您是否查看过图片的href,看看它是否真的以您认为的方式插入到 HTML 中?
  • 是的,我查过了
  • 您使用的是什么图像控件?很好奇,因为看起来 http 被剥离了,但它不在我的测试中。我正在使用&lt;asp:Image ID="imgGravatar" runat="server" /&gt;imgGravatar.ImageUrl = string.Format("http://www.gravatar.com/avatar/{0}", hash);。 Fwiw,我确实从浏览器内部的 url 中剥离了协议 (http),它仍然有效,所以它可能根本不重要,但这很奇怪。
  • @wazz 我正在使用这个
  • 使用该 aspx 标记更新问题,并准确显示分配 url 的方式/时间。解释 Eval 部分。情节变厚了。

标签: c# asp.net avatar gravatar


【解决方案1】:

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

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

更新

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

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

因此,您询问是否要生成 Gravatar 图片,但您认为您没有得到有效结果,因为您将结果与使用 Google 个人资料图片的服务进行比较,并且仅依靠 gravatar 作为备份选项。

【讨论】:

  • 请检查问题。这是 HTML 元素
  • +1 : 我尝试将电子邮件地址中的字母大写,但我得到了 gravatar 徽标而不是有效图像。
  • @Sylar:感谢您将这些信息添加到问题中。我要断言不可能您发布的代码生成了您最终得到的头像 URL。一方面,您的代码使用格式字符串“x2”,这将产生小写哈希,而您提供的 URL 全部为大写。除此之外,您的 string.Format 调用在前面包含“http://”,但您的 url 以“//”开头。除非您发布a minimal, complete, verifiable example,否则其他人很难帮助您找到您的错误。
  • @Sylar:举个例子,当给定电子邮件地址 tomster@emberjs.com(从this question 提取)时,您的代码会生成gravatar.com/avatar/0cf15665a9146ba852bf042b0652780a
  • @StriplingWarrior 更新了问题。请检查
猜你喜欢
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-18
  • 2020-01-07
  • 2021-12-16
  • 2013-10-26
  • 2018-06-13
  • 2013-04-12
相关资源
最近更新 更多