我有一个使用asp.net开发的网站,c#
在那里我制作了自己的评论系统。如果用户想发表评论,他必须输入评论,姓名和电子邮件。
当我加载评论时,我正在使用此代码加载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指向他们的网站。所以我需要一个干净的方法。我的代码怎么了?
答案 0 :(得分:0)
如果将代码应用于全小写的电子邮件地址,那么您的代码可以很好地生成我的gravatar。我只检查了几件事:
email.Trim().ToLowerInvariant()
传递给GetBytes方法。string.Format()
生成的实际字符串。您的文化设置可能会影响字符串的表示方式(尽管不太可能)。您可以将CultureInfo.Invariant
参数传递给string.Format()
,或者只是切换到使用+
运算符直接连接字符串。此API使用Google提供的公开个人资料信息,通过公开的Google数据源来确定用户的姓名和个人资料图片。通过此API可提供超过10亿个配置文件图片。该API最适用于Gmail地址,但许多其他电子邮件帐户已在Google注册。
因此,您要求制作Gravatar图片,但是您认为自己没有获得有效的结果,因为您将结果与使用Google个人资料图片的服务进行比较,并且仅作为备份使用gravatar选项。