用于访问Gravatar图像的ASP.NET MVC帮助器
发布时间:2020-12-15 20:10:47 所属栏目:asp.Net 来源:网络整理
导读:虽然Gravatar服务的API(好吧,它只是一个URL)是非常简单的,是否有一个简单的帮助方法,这是一个很好的反映Gravatar可用的所有选项? 图像大小 默认图像(用户未指定时) 评级(G / PG / R / X) 理想情况下,这将是一个HtmlHelper扩展方法. 我在.NET4上定位MVC2,但
|
虽然Gravatar服务的API(好吧,它只是一个URL)是非常简单的,是否有一个简单的帮助方法,这是一个很好的反映Gravatar可用的所有选项?
>图像大小 理想情况下,这将是一个HtmlHelper扩展方法. 我在.NET4上定位MVC2,但是我认为其他人也会对较早版本的选项感兴趣. 编辑实现应该允许为生成的HTML元素提供附加属性. 解决方法
感谢您的答案.最后我写了我自己的解决方案,所以我会把它发贴给任何其他可能会发现它有用的人.
它符合Gravatar支持的所有功能,如问题所列. 使用它像这样: <%= Html.Gravatar(Model.User.EmailAddress) %> 我为任何呃选项提供了可选参数.这些可以组合. // Use a specific image size (the default is 80px)
Html.Gravatar(Model.User.EmailAddress,size:64)
// Specify what image should appear if the email address is not
// associated with a Gravatar account
Html.Gravatar(Model.User.EmailAddress,defaultImage:GravatarDefaultImage.Identicon)
// Specify the maximum rating allowed for images
Html.Gravatar(Model.User.EmailAddress,rating:GravatarRating.Pg)
// Add any additional HTML attributes for the <img /> tag
Html.Gravatar(Model.User.EmailAddress,htmlAttributes:new { @class = "gravatar" })
以下是代码: using System;
using System.Diagnostics;
using System.Security.Cryptography;
using System.Text;
using System.Web.Mvc;
using System.Web.Routing;
namespace SampleNamespace
{
public static class HtmlHelperGravatar
{
/// <summary>
/// Creates HTML for an <c>img</c> element that presents a Gravatar icon.
/// </summary>
/// <param name="html">The <see cref="HtmlHelper"/> upon which this extension method is provided.</param>
/// <param name="email">The email address used to identify the icon.</param>
/// <param name="size">An optional parameter that specifies the size of the square image in pixels.</param>
/// <param name="rating">An optional parameter that specifies the safety level of allowed images.</param>
/// <param name="defaultImage">An optional parameter that controls what image is displayed for email addresses that don't have associated Gravatar icons.</param>
/// <param name="htmlAttributes">An optional parameter holding additional attributes to be included on the <c>img</c> element.</param>
/// <returns>An HTML string of the <c>img</c> element that presents a Gravatar icon.</returns>
public static string Gravatar(this HtmlHelper html,string email,int? size = null,GravatarRating rating = GravatarRating.Default,GravatarDefaultImage defaultImage = GravatarDefaultImage.MysteryMan,object htmlAttributes = null)
{
var url = new StringBuilder("//www.gravatar.com/avatar/",90);
url.Append(GetEmailHash(email));
var isFirst = true;
Action<string,string> addParam = (p,v) =>
{
url.Append(isFirst ? '?' : '&');
isFirst = false;
url.Append(p);
url.Append('=');
url.Append(v);
};
if (size != null)
{
if (size < 1 || size > 512)
throw new ArgumentOutOfRangeException("size",size,"Must be null or between 1 and 512,inclusive.");
addParam("s",size.Value.ToString());
}
if (rating != GravatarRating.Default)
addParam("r",rating.ToString().ToLower());
if (defaultImage != GravatarDefaultImage.Default)
{
if (defaultImage==GravatarDefaultImage.Http404)
addParam("d","404");
else if (defaultImage==GravatarDefaultImage.Identicon)
addParam("d","identicon");
if (defaultImage==GravatarDefaultImage.MonsterId)
addParam("d","monsterid");
if (defaultImage==GravatarDefaultImage.MysteryMan)
addParam("d","mm");
if (defaultImage==GravatarDefaultImage.Wavatar)
addParam("d","wavatar");
}
var tag = new TagBuilder("img");
tag.MergeAttributes(new RouteValueDictionary(htmlAttributes));
tag.Attributes.Add("src",url.ToString());
if (size!=null)
{
tag.Attributes.Add("width",size.ToString());
tag.Attributes.Add("height",size.ToString());
}
return tag.ToString();
}
private static string GetEmailHash(string email)
{
if (email == null)
return new string('0',32);
email = email.Trim().ToLower();
var emailBytes = Encoding.ASCII.GetBytes(email);
var hashBytes = new MD5CryptoServiceProvider().ComputeHash(emailBytes);
Debug.Assert(hashBytes.Length == 16);
var hash = new StringBuilder();
foreach (var b in hashBytes)
hash.Append(b.ToString("x2"));
return hash.ToString();
}
}
public enum GravatarRating
{
/// <summary>
/// The default value as specified by the Gravatar service. That is,no rating value is specified
/// with the request. At the time of authoring,the default level was <see cref="G"/>.
/// </summary>
Default,/// <summary>
/// Suitable for display on all websites with any audience type. This is the default.
/// </summary>
G,/// <summary>
/// May contain rude gestures,provocatively dressed individuals,the lesser swear words,or mild violence.
/// </summary>
Pg,/// <summary>
/// May contain such things as harsh profanity,intense violence,nudity,or hard drug use.
/// </summary>
R,/// <summary>
/// May contain hardcore sexual imagery or extremely disturbing violence.
/// </summary>
X
}
public enum GravatarDefaultImage
{
/// <summary>
/// The default value image. That is,the image returned when no specific default value is included
/// with the request. At the time of authoring,this image is the Gravatar icon.
/// </summary>
Default,/// <summary>
/// Do not load any image if none is associated with the email hash,instead return an HTTP 404 (File Not Found) response.
/// </summary>
Http404,/// <summary>
/// A simple,cartoon-style silhouetted outline of a person (does not vary by email hash).
/// </summary>
MysteryMan,/// <summary>
/// A geometric pattern based on an email hash.
/// </summary>
Identicon,/// <summary>
/// A generated 'monster' with different colors,faces,etc.
/// </summary>
MonsterId,/// <summary>
/// Generated faces with differing features and backgrounds.
/// </summary>
Wavatar
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 实体框架MVC慢页面加载
- asp.net+js实现批量编码与解码的方法
- ASP.NET – 在postBack之后将屏幕滚动到之前的位置
- asp.net-web-api – WebApi – 传递一组值
- asp.net-mvc – 官方的“如何”MVC编辑器/显示模板?
- asp.net-mvc – 发布ASP.NET MVC 3 Html.TextAreaFor的Html
- asp.net-mvc-3 – MVC3 – 编译的Razor视图找不到_ViewStar
- ASP.NET网站内存使用率相当高
- asp.net – 电子邮件CSS
- ASP.NET MVC 3中的c# – @ Html.ActionLink
推荐文章
站长推荐
- asp.net-mvc – 在ajax请求中返回PDF
- asp.net-mvc-4 – ViewModels或ViewBag?
- asp.net – IIS 7:将所有请求重定向到Default.a
- 动手造轮子:实现一个简单的 AOP 框架
- asp.net-mvc – 什么是MVC 5的会员提供商?
- asp.net-mvc – 类型“表达式<>”在未引用的程序
- asp.net-mvc – 如何在ASP.Net MVC中摆脱Home?
- ASP.NET MVC中的jQuery CRUD
- asp.net-mvc-3 – 何时在Mvc3中使用ViewBag,View
- asp.net – 如何在主管批准更改之前保留新旧版本
热点阅读
