对于一个项目,我们要生成静态.html页面,这些页面将在同一台服务器上发布,以便为数百万访问者提供服务。
我们要从c#代码自动创建这些文件,这些代码从SQL Server数据库中获取数据。
该项目已经使用C#asp.net MVC3开发,我们需要将.html中动态生成的页面存储在同一个URL上,以便为访问者提供。
我想知道如何使用asp.net MVC3 / Razor生成那些.html页面?
我不想/需要使用网络缓存,原因很多(加载(每天加载数百万页)),这些静态页面将缓存在CDN网络上以进一步提供超快速服务而无需原始服务器进入图片,页面数量真的太多了(缓存只会帮助我,如果我有相同的页面很多时间,但我会经常访问超过百万页,所以我必须经常生成它们。)< / p>
所以我真的要搜索一些东西来生成HTML页面。
知道如何做到这一点......
答案 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();
}
}