生成静态HTML页面以替换动态页面

时间:2012-07-08 11:33:56

标签: asp.net asp.net-mvc-3 performance razor

对于一个项目,我们要生成静态.html页面,这些页面将在同一台服务器上发布,以便为数百万访问者提供服务。

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

该项目已经使用C#asp.net MVC3开发,我们需要将.html中动态生成的页面存储在同一个URL上,以便为访问者提供。

我想知道如何使用asp.net MVC3 / Razor生成那些.html页面?

我不想/需要使用网络缓存,原因很多(加载(每天加载数百万页)),这些静态页面将缓存在CDN网络上以进一步提供超快速服务而无需原始服务器进入图片,页面数量真的太多了(缓存只会帮助我,如果我有相同的页面很多时间,但我会经常访问超过百万页,所以我必须经常生成它们。)< / p>

所以我真的要搜索一些东西来生成HTML页面。

知道如何做到这一点......

4 个答案:

答案 0 :(得分:2)

首先,确保您的路由都生成可以复制为静态html文件的URL。因此,您对Html.ActionLink的调用将生成您可以使用的URL。

生成整个网站,就像直接使用它一样,然后让它在外部缓存

你可以在Linux上使用类似wget的东西来抓取网站的整个html树,然后将它们与内容文件放在一起; css,图像,javascript等。

然后在有更改时重新下载网站。

答案 1 :(得分:2)

在我的公司,我们做了类似的事情。我们有一个单独的程序,它包含一个url列表,向它们发送一个http请求。保存结果并将其复制到Web服务器。这样,我们在网络内部只有一个带有asp代码的Web服务器,并且Internet上的服务器具有动态页面的静态副本。我们从中获得了很好的表现。

为了获得网址列表,您可能需要创建一个特殊的视图/控制器,在数据库中查询可用于查询所需信息的密钥。因此,如果您有一个显示汉堡包的网站,那么创建网址的列表视图可能会查询您的汉堡包并创建一堆/ myburger?name = Wopper类型的网址。然后您的批处理程序读取这些URL并如前所述,执行http请求并保存结果等。

答案 2 :(得分:1)

如果要根据mvc视图和模型生成html,可以使用Razor。 我用它来生成电子邮件模板,我们使用Razor将模型注入视图。您可以从视图生成html并将其写入静态html文件(如果这符合您的目的)。 从NuGet引用Razor引擎,你可以像

一样使用它
var html = Razor.Parse(templateView, model);

如果您想要更多自定义,可能本教程可以帮助您。 http://www.west-wind.com/weblog/posts/2012/May/30/Rendering-ASPNET-MVC-Views-to-String

答案 3 :(得分:0)

我总是使用自己的电子邮件生成方法而不是MvcMailer。 首先,您应该从视图或部分生成一个字符串,然后添加/删除一些html标记,如<html>等,如果需要...接下来将此字符串写入文件,将其另存为.html归档到你的路径。

public static string HTMLToString(ControllerContext context, string viewName, object model)
{
    if (string.IsNullOrEmpty(viewName))
        viewName = context.RouteData.GetRequiredString("action");

    var viewData = new ViewDataDictionary(model);

    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(context, viewName);
        var viewContext = new ViewContext(context, viewResult.View, viewData, new TempDataDictionary(), sw);
        viewResult.View.Render(viewContext, sw);

        return sw.GetStringBuilder().ToString();
    }
}