使用razor / asp.net mvc3生成静态html页面?

时间:2012-06-25 11:07:48

标签: c# html asp.net-mvc razor

对于一个项目,我将生成静态.html页面,这些页面将在远程服务器上发布。

我要从c#代码自动创建这些文件,这些代码从SQL Server数据库中获取数据。

数据不会经常更改(每4-5个月一次),而且这个网站的频率很高。

由于我发现asp.net MVC3的剃刀synthax非常有效,我想知道是否可以使用asp.net MVC3 / Razor生成那些.html页面?

所以:

  1. 这是个好主意吗?
  2. 如果是,那有什么好方法?
  3. 如果你想到另一种好的方式,这样做?
  4. 感谢您的帮助

    修改

    关于答案,我需要精确:我不想/需要使用Web缓存,原因很多(加载(每月加载数百万页),集成(我们将页面集成到优化中) apache with,另一部分网站),页面数量(缓存只会帮助我,如果我有相同的页面很多时间,但我会有~2500页,所以墨菲定律,除非我放了一个非常高缓存超时,我将不得不经常生成它们。所以我真的搜索一些东西来生成HTML页面。

    编辑2 我刚刚得到一个新约束:/那些模板必须本地化。这意味着我应该拥有与以下剃刀代码相同的东西:@MyLocalizationFile.My.MyValue

    编辑3 目前,我正在考虑做一个动态网站,并在其上调用一些http查询,以存储生成的HTML。但是,有没有办法避免http?意思是模拟一个http调用,指定输出流和调用的url(只有GET调用)。

    我们以前的负载数据实际上被低估了,实际上他们每天的访问量超过一百万,每天负载达到1400万页。

7 个答案:

答案 0 :(得分:7)

  1. 是的。即使您可以缓存结果,HTML页面也总是更快并且使用更低的服务器资源
  2. 一种好方法是转换your razor views into text,然后将文本另存为html文件。
  3. 另一种方法可以使用T4 templates,但我推荐使用Razor。

答案 1 :(得分:3)

您可以使用Razor引擎(NuGet-link,他们的website),这样您就可以在不使用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);
        }
    }
}

答案 2 :(得分:2)

我认为不是生成静态HTML页面,而是每次动态生成页面更好,但使用缓存来提高性能。

有关更多信息,请参阅有关使用ASP.NET MVC3进行缓存的文章:

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

答案 3 :(得分:0)

是否有任何性能原因导致您需要预先渲染网站?我们在谈论多少页?您的控制器采用什么样的参数?如果vanilla缓存不能满足您的要求,对我来说最好的方法是基于磁盘的缓存提供程序......

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

答案 4 :(得分:0)

查看T4模板或类似的模板解决方案

答案 5 :(得分:0)

我最后创建了一个普通的asp.net MVC网站,然后通过使用WebClient进入页面来生成页面。

像这样我可以预览网站,我可以享受Razor + MVC助手的全部功能。

答案 6 :(得分:0)

我正在研究类似的解决方案。我的网站在暂存环境中正常运行(ASP.NET + DB + CMS),然后我使用wget抓取它并生成静态html页面。然后将这些静态html页面(包括资产)上载到Amazon S3 Bucket。这样,网站就变得完全静态,没有依赖性。

我计划每天执行一项任务,抓取网站上的特定网页,以加快速度,例如每天只抓取/新闻。

我知道你已经找到了解决方案,但也许这个答案对其他人有帮助。