基於 ASP.NET Core 2.1 的 Razor Class Library 實現自定義錯誤頁面的公用類庫


注意:文中使用的是 razor pages ,建議使用 razor views ,使用 razor pages 有一個小坑,razor pages 會用到 {page} 路由參數,如果應用中也用到了這個路由參數,會造成沖突。

Razor Class Library 是 ASP.NET Core 2.1 的新特性,可以將 MVC 視圖編譯為程序集供其他項目引用,詳見 Create reusable UI using the Razor Class Library project in ASP.NET Core 

之前我們為了實現在各個項目中共用自定義錯誤頁面,通過“中間件+字符串拼接頁面html”的方式實現了一個公用類庫,但實現復雜,頁面維護很不方便。

Razor Class Library 正好可以解決我們的這個心頭之痛,趁着今天 .NET Core 2.1 正式版發布 之熱,體驗一下這個新特性。

直接在現有的類庫項目中修改,先在 .csproj 中將  <Project Sdk="Microsoft.NET.Sdk"> 改為  <Project Sdk="Microsoft.NET.Sdk.Razor"> ,並 nuget 安裝   Microsoft.AspNetCore.Mvc  。

接着創建 Pages/Errors 文件夾,並在其中添加 400.cshtml, 404.cshtml, 500.cshtml 這 3 個 Razor Page 文件。

這時如果在解決方案中另外添加一個 web 項目,引用這個 RCL 類庫項目后,就可以通過 /Error/404 這樣的路徑直接訪問自定義錯誤頁面了,封裝在類庫中的視圖生效了。

啟用這些自定義錯誤頁面需要在 Startup 的 Configure 方法中添加如下的代碼:

app.UseExceptionHandler("/Errors/500");
app.UseStatusCodePagesWithReExecute("/Errors/{0}");

為了使用方便,實現一個擴展方法:

public static class CustomErrorPagesExtensions
{
    public static IApplicationBuilder UseCustomErrorPages(this IApplicationBuilder app)
    {
        app.UseExceptionHandler("/Errors/500");
        app.UseStatusCodePagesWithReExecute("/Errors/{0}");
        return app;
    }
}

然后發布 nuget 包,需要用的項目安裝 nuget 包,在  Startup 的 Configure 中添加 app.UseCustomErrorPages() 即可。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseCustomErrorPages();
    }
}

用 Razor Class Library 實現不僅以后維護方便,而且超級簡單清爽,贊嘆 RCL 的同時將之前的一堆代碼全丟進了垃圾桶。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM