只想确认无法在不编写替换函数的情况下扩展或替换Html.Image功能。
我想编写一个使用亚马逊S3服务来托管图片的功能。
我提出的最好的方法是帮助方法Html.SmartImage
,它会检查配置属性,看看我是否想要去亚马逊。它甚至可以检查远程托管的文件的数据库,如果它们在该列表中,则只将它们“移出”。
我会在发布时发布我所拥有的内容 - 但对任何“开箱即用”的想法感到好奇。
答案 0 :(得分:0)
不,你是对的,你需要创建自己的扩展方法来处理这样的自定义场景。
答案 1 :(得分:0)
这就是我所做的 - 至少现在是这样:
搜索和替换
html.image("~
的
Html.CDNImage("~
然后在静态类ImageExtensions
中创建了一个帮助器:
public static string CDNImage(this HtmlHelper htmlHelper, string imageRelativeUrl)
{
return CDNImage(htmlHelper, imageRelativeUrl, null, null);
}
public static string CDNImage(this HtmlHelper htmlHelper, string imageRelativeUrl, object htmlAttributes)
{
return CDNImage(htmlHelper, imageRelativeUrl, null, htmlAttributes);
}
public static string CDNImage(this HtmlHelper htmlHelper, string imageRelativeUrl, string alt, object htmlAttributes)
{
string url = Regex.Replace(imageRelativeUrl, "~/content/", "http://s3.amazon.com/", RegexOptions.Compiled | RegexOptions.IgnoreCase);
return htmlHelper.Image(url, alt, htmlAttributes);
}
显然我在这里使用s3.amazon.com
作为占位符 - 你必须填写你的CDN的URL。
如果需要,您可以使用某种配置属性来确定您是否实际进行了替换。