1个文件如何轻松搞定Asp.net core 3.1动态页面转静态
前言
最近一个Asp. core项目需要静态化页面,百度查找了一下,没有发现合适的。原因如下
- 配置麻烦。
- 类库引用了第三方类,修改起来麻烦。
- 有只支持MVC,不支持PageModel。
- 继承ActionFilterAttribute类,只重写了OnActionExecutionAsync,看似静态化了,其实运行时该查数据库还是查数据库,没有真正静态化。
- 缺少灵活性,没有在线更新静态文件方法,不能测试查看实时页面,没有进行Html压缩,没有使用gzip、br压缩文件.
于是我开始了页面静态化项目,只过几分钟就遇到了Asp. core的一个大坑——Response.Body是一个只写Stream,无法读取返回的信息。
参考lwqlun的博客解决了,相关地址
代码如下
var filePath = GetOutputFilePath(context); var response = context.HttpContext.Response; if (!response.Body.CanRead || !response.Body.CanSeek) { using (var ms = new MemoryStream()) { var old = response.Body; response.Body = ms; await base.OnResultExecutionAsync(context, next); if (response.StatusCode == 200) { await SaveHtmlResult(response.Body, filePath); } ms.Position = 0; await ms.CopyToAsync(old); response.Body = old; } } else { await base.OnResultExecutionAsync(context, next); var old = response.Body.Position; if (response.StatusCode == 200) { await SaveHtmlResult(response.Body, filePath); } response.Body.Position = old; }
解决了这个大坑后,就没遇过什么问题了。
项目地址
快速入门
1、将HtmlStaticFileAttribute.cs放到项目下;
2、添加[HtmlStaticFile]
2.1、在控制器文件中,在类名或Action方法上添加[HtmlStaticFile]。
using Microsoft.AspNetCore.Mvc; namespace StaticPage.Mvc.Controllers { public class HomeController : Controller { [HtmlStaticFile] [HttpGet("/Count")] public IActionResult Count() { return View(); } } }
2.2或 在PageModel文件中,在类名上添加[HtmlStaticFile]。
注PageModel文件中,在方法上添加[HtmlStaticFile]是无效的。
using Microsoft.AspNetCore.Mvc; namespace StaticPage.Pages { [HtmlStaticFile] public class CountModel : PageModel { public void OnGet() { } } }
其他配置
设置缓存文件夹
HtmlStaticFileAttribute.OutputFolder = @"D:\html";
使用压缩
HtmlStaticFileAttribute.UseBrCompress = true;
HtmlStaticFileAttribute.UseGzipCompress = true;
设置页面缓存时间
HtmlStaticFileAttribute.ExpireMinutes = 3;
使用开发模式 ,在开发模式,页面不会被缓存,便于开发调试。
HtmlStaticFileAttribute.IsDevelopmentMode = true;
支持Url参数,不推荐使用
HtmlStaticFileAttribute.UseQueryString = true;
使用Html压缩,推荐使用WebMarkupMin来压缩Html。
HtmlStaticFileAttribute.MiniFunc += (string html) => { var js = new NUglifyJsMinifier(); var css = new NUglifyCssMinifier(); XhtmlMinifier htmlMinifier = new XhtmlMinifier(null, css, js, null); var result = htmlMinifier.Minify(html); if (result.Errors.Count == 0) { return result.MinifiedContent; } return html; };
更新文件缓存
在Url地址后面添加参数“update”,访问一下就可以生成新的静态页面。
如
https://localhost:44304/Count?__update__
测试页面,不更新文件缓存
在Url地址后面添加参数“test”,访问一下就可以生成新的静态页面。
如
https://localhost:44304/Count?__test__
项目地址
到此这篇关于1个文件如何轻松搞定Asp. core 3.1动态页面转静态页面的文章就介绍到这了,更多相关Asp. core3.1动态页面转静态页面内容请搜索狼蚁SEO以前的文章或继续浏览狼蚁网站SEO优化的相关文章希望大家以后多多支持狼蚁SEO!
编程语言
- 宿迁百度关键词排名指南:实现精准营销的关键
- 四川SEO优化怎么做网络推广
- 立昂技术备案老域名收购:如何为您的业务赋能
- 安徽百度关键词seo贵不贵,一般需要多少钱
- 吉林百度快照排名怎么做电话营销
- 多伦新手做SEO怎么做
- 甘肃优化关键词排名推广怎么做论坛营销
- 沙雅SEO网站推广:提升您的在线可见性
- 四川SEO优化如何提升销售额和销售量
- 聂荣网站排名优化:提升网站可见性的全方位指
- 涞水SEO:提升地方企业在线可见性的策略
- 辽宁百度seo排名怎样做网站排名
- 临湘哪有关键词排名优化:提升网站可见度的关
- 黑龙江百度网站优化有没有优惠
- 凉城优化关键词排名推广:提升您的网络可见性
- 萝北整站优化:提升您网站流量和排名的全面指