Расширение / замена Html.Image для Amazon S3 (или другого CDN) - PullRequest
0 голосов
/ 10 марта 2009

Просто хочу подтвердить, что невозможно расширить или заменить функциональность Html.Image без написания функции замены.

Я хочу написать функцию, которая будет использовать сервис Amazon S3 для размещения изображений.

Лучший подход, который я предложил, - это вспомогательный метод Html.SmartImage, который проверяет свойство конфигурации, чтобы узнать, хочу ли я перейти на Amazon или нет. Он может даже проверять базу данных файлов, которые размещены удаленно, и «выводить их» только в том случае, если они находятся в этом списке.

Я опубликую то, что у меня есть, когда я это сделаю, но мне будет любопытно, какие-нибудь нестандартные идеи.

Ответы [ 2 ]

0 голосов
/ 10 марта 2009

Вот что я сделал - по крайней мере сейчас:

Поиск и замена:

 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 в качестве заполнителя здесь - вы должны заполнить URL для вашего CDN, какой бы он ни был.

При необходимости вы можете использовать какое-либо свойство конфигурации, чтобы определить, действительно ли вы выполняете замену.

0 голосов
/ 10 марта 2009

Нет, вы правы, вам нужно создать собственный метод расширения для обработки пользовательских сценариев, подобных этому.

...