【发布时间】: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 被剥离了,但它不在我的测试中。我正在使用
<asp:Image ID="imgGravatar" runat="server" />和imgGravatar.ImageUrl = string.Format("http://www.gravatar.com/avatar/{0}", hash);。 Fwiw,我确实从浏览器内部的 url 中剥离了协议 (http),它仍然有效,所以它可能根本不重要,但这很奇怪。 -
@wazz 我正在使用这个
-
使用该 aspx 标记更新问题,并准确显示分配 url 的方式/时间。解释 Eval 部分。情节变厚了。
标签: c# asp.net avatar gravatar