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 电子邮件地址,则您的代码可以很好地生成我的头像。我只检查几件事:
- Gravatar 的 docs 显示初始电子邮件地址需要在散列之前修剪并转换为小写。首先尝试将
email.Trim().ToLowerInvariant()
传递给 GetBytes 方法。
- 您没有显示您的
string.Format()
生成的实际字符串。您的区域性设置可能(尽管不太可能)影响字符串的表示方式。您可以将 CultureInfo.Invariant
参数传递给 string.Format()
,或者直接切换为使用 +
运算符连接字符串。
- 您没有显示在浏览器中呈现的实际 HTML 标记。有可能 client-side 没有正确读取或应用服务器的响应。
更新
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 作为备份选项。
我有一个使用 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 电子邮件地址,则您的代码可以很好地生成我的头像。我只检查几件事:
- Gravatar 的 docs 显示初始电子邮件地址需要在散列之前修剪并转换为小写。首先尝试将
email.Trim().ToLowerInvariant()
传递给 GetBytes 方法。 - 您没有显示您的
string.Format()
生成的实际字符串。您的区域性设置可能(尽管不太可能)影响字符串的表示方式。您可以将CultureInfo.Invariant
参数传递给string.Format()
,或者直接切换为使用+
运算符连接字符串。 - 您没有显示在浏览器中呈现的实际 HTML 标记。有可能 client-side 没有正确读取或应用服务器的响应。
更新
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 作为备份选项。