您好,登錄后才能下訂單哦!
這篇文章主要介紹1個文件輕松搞定Asp.net core 3.1動態頁面轉靜態頁面的示例,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
前言
最近一個Asp.net core項目需要靜態化頁面,百度查找了一下,沒有發現合適的。原因如下
配置麻煩。
類庫引用了第三方類,修改起來麻煩。
有只支持MVC,不支持PageModel。
繼承ActionFilterAttribute類,只重寫了OnActionExecutionAsync,看似靜態化了,其實運行時該查數據庫還是查數據庫,沒有真正靜態化。
缺少靈活性,沒有在線更新靜態文件方法,不能測試查看實時頁面,沒有進行Html壓縮,沒有使用gzip、br壓縮文件.
于是我開始了頁面靜態化項目,只過幾分鐘就遇到了Asp.net core的一個大坑——Response.Body是一個只寫Stream,無法讀取返回的信息。
代碼如下:
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; }
解決了這個大坑后,就沒遇過什么問題了。
項目地址:https://github.com/toolgood/StaticPage
快速入門
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__
項目地址:https://github.com/toolgood/StaticPage
以上是“1個文件輕松搞定Asp.net core 3.1動態頁面轉靜態頁面的示例”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。