对于一个项目,我将生成静态.html页面,这些页面将在远程服务器上发布。
我要从c#代码自动创建这些文件,这些代码从SQL Server数据库中获取数据。
数据不会经常更改(每4-5个月一次),而且这个网站的频率很高。
由于我发现asp.net MVC3的剃刀synthax非常有效,我想知道是否可以使用asp.net MVC3 / Razor生成那些.html页面?
所以:
感谢您的帮助
修改
关于答案,我需要精确:我不想/需要使用Web缓存,原因很多(加载(每月加载数百万页),集成(我们将页面集成到优化中) apache with,另一部分网站),页面数量(缓存只会帮助我,如果我有相同的页面很多时间,但我会有~2500页,所以墨菲定律,除非我放了一个非常高缓存超时,我将不得不经常生成它们。所以我真的搜索一些东西来生成HTML页面。
编辑2
我刚刚得到一个新约束:/那些模板必须本地化。这意味着我应该拥有与以下剃刀代码相同的东西:@MyLocalizationFile.My.MyValue
编辑3 目前,我正在考虑做一个动态网站,并在其上调用一些http查询,以存储生成的HTML。但是,有没有办法避免http?意思是模拟一个http调用,指定输出流和调用的url(只有GET调用)。
我们以前的负载数据实际上被低估了,实际上他们每天的访问量超过一百万,每天负载达到1400万页。
答案 0 :(得分:7)
答案 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进行缓存的文章:
答案 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。这样,网站就变得完全静态,没有依赖性。
我计划每天执行一项任务,抓取网站上的特定网页,以加快速度,例如每天只抓取/新闻。
我知道你已经找到了解决方案,但也许这个答案对其他人有帮助。