亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

1個文件輕松搞定Asp.net core 3.1動態頁面轉靜態頁面的示例

發布時間:2021-02-01 10:56:25 來源:億速云 閱讀:305 作者:小新 欄目:開發技術

這篇文章主要介紹1個文件輕松搞定Asp.net core 3.1動態頁面轉靜態頁面的示例,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

前言

最近一個Asp.net core項目需要靜態化頁面,百度查找了一下,沒有發現合適的。原因如下

  1. 配置麻煩。

  2. 類庫引用了第三方類,修改起來麻煩。

  3. 有只支持MVC,不支持PageModel。

  4. 繼承ActionFilterAttribute類,只重寫了OnActionExecutionAsync,看似靜態化了,其實運行時該查數據庫還是查數據庫,沒有真正靜態化。

  5. 缺少靈活性,沒有在線更新靜態文件方法,不能測試查看實時頁面,沒有進行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動態頁面轉靜態頁面的示例”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平潭县| 青河县| 定南县| 台前县| 平果县| 安庆市| 肃宁县| 察隅县| 商丘市| 西乌珠穆沁旗| 阿城市| 军事| 漳平市| 盐津县| 鄂尔多斯市| 轮台县| 阿荣旗| 方城县| 巫溪县| 罗城| 恭城| 若羌县| 广西| 吉木萨尔县| 瑞金市| 崇阳县| 赤壁市| 万盛区| 嘉禾县| 崇仁县| 木里| 泾阳县| 大英县| 焦作市| 道真| 许昌县| 和平区| 沅江市| 宁安市| 吐鲁番市| 宣汉县|