Использовать razor/asp.net mvc3 для создания статических html-страниц?

Для одного проекта я должен создавать статические .html-страницы, которые собираются опубликовать на удаленном сервере.

Мне нужно автоматизировать создание этих файлов из кода С#, который берет данные из базы данных SQL Server.

Данные не будут часто меняться (каждые 4-5 месяцев), и этот сайт будет очень часто посещать.

Поскольку я нахожу синтаксис бритвы asp.net MVC3 очень эффективным, мне было интересно, можно ли использовать asp.net MVC3/Razor для создания этих .html-страниц?

Итак:

  • Это хорошая идея?
  • Если да, то какой хороший способ?
  • Если вы думаете о другой хорошей манере делать это, то каким образом?

Спасибо за помощь

Edit

Что касается ответов, мне нужно сделать точность: я не хочу/должен использовать веб-кеширование по многим причинам (загрузка (миллионы страниц, загружаемых каждый месяц), интеграция (мы интегрируем нашу страницу в оптимизированную apache с другой частью сайта), количество страниц (кеширование поможет мне только в том случае, если у меня будут одни и те же страницы много времени, но у меня будет ~ 2500 страниц, поэтому с законом murphy, за исключением случаев, когда я ставил очень высокий тайм-аут кеша, мне придется их генерировать часто). Поэтому я действительно ищу что-то для создания HTML-страниц.

Изменить 2 Я просто получил новое ограничение:/Эти шаблоны должны быть локализованы. Это означает, что у меня должно быть что-то эквивалентное следующему коду бритвы: @MyLocalizationFile.My.MyValue

Изменить 3 В настоящее время я собираюсь сделать динамический веб-сайт и вызвать на нем некоторый HTTP-запрос, чтобы сохранить сгенерированный HTML-код. НО, есть ли способ избежать http? означает симуляцию вызова http, укажите выходной поток и URL-адрес (только с вызовом GET).

Наши предыдущие загрузочные номера были действительно недооценены, на самом деле у них чуть больше одного миллиона посетителей каждый день, ~ 14 миллионов страниц в день/день.

Ответ 1

Я закончил создание обычного веб-сайта asp.net MVC, а затем сгенерировал страницу, перейдя на страницу с помощью WebClient.

Как и я, у меня может быть предварительный просмотр веб-сайта, и я могу наслаждаться полной мощью помощников Razor + MVC.

Ответ 2

  • Да, это так. Даже когда вы можете кэшировать результаты, страницы HTML будут всегда быстрее и использовать более низкие серверные ресурсы.
  • Хороший способ - преобразовать ваши изображения бритвы в текст, а затем сохранить текст в виде html файла.
  • Другим способом может быть использование шаблонов T4, но я рекомендую Razor.

Ответ 3

Вы можете использовать Razor Engine (NuGet-link, их веб-сайт). Таким образом вы можете создавать шаблоны из консольного приложения без использования asp.net MVC.

Я использую его следующим образом:

public string ParseFile<T>(string fileName, T model) {
    var file = File.OpenText(fileName);
    var sb = new StringBuilder();
    string line;
    while ((line = file.ReadLine()) != null)
    {
        // RazorEngine does not recognize the @model line, remove it
        if (!line.StartsWith("@model ", StringComparison.OrdinalIgnoreCase))
            sb.AppendLine(line);
        }
        file.Close();

        // Stuff to make sure we get unescaped-Html back:
        var config = new FluentTemplateServiceConfiguration(
                    c => c.WithEncoding(RazorEngine.Encoding.Raw));

        string result;
        using (var service = new TemplateService(config))
        {
            return service.Parse<T>(sb.ToString(), model);
        }
    }
}

Ответ 4

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

См. эту статью о кешировании с помощью ASP.NET MVC3 для получения дополнительной информации:

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs

Ответ 5

Есть ли какая-либо причина в производительности, с которой вы столкнулись, что могло бы приложить усилия для предварительного рендеринга веб-сайта? Сколько страниц мы говорим? Какими параметрами управляют ваши контроллеры? Если кэширование ванили не удовлетворяет вашим требованиям, для меня лучшим подходом будет поставщик кэширования на основе диска...

http://www.juliencorioland.net/Archives/en-aspnet-mvc-custom-output-cache-provider

Ответ 6

Посмотрите на шаблоны T4 или аналогичное решение для шаблонов

Ответ 7

Я работаю над аналогичным решением. Мой сайт работает нормально (ASP.NET + DB + CMS) в промежуточной среде, а затем я использую wget для обхода и создания статических html-страниц. Те статические html-страницы, включая активы, затем загружаются в Buzz Amazon S3. Таким образом, веб-сайт становится полностью статическим, без зависимостей.

Я планирую иметь ежедневную задачу, которая сканирует определенные страницы на веб-сайте, чтобы сделать ее более быстрой, например. только сканирование/новости каждый день.

Я знаю, что вы уже нашли решение, но, возможно, этот ответ может быть полезен другим.