zoukankan      html  css  js  c++  java
  • 基于 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 的同时将之前的一堆代码全丢进了垃圾桶。

  • 相关阅读:
    ClickOnce發布經驗
    reporting Server組件不全引起的致命錯誤
    異步調用
    Usercontrol Hosted in IE
    MATLAB命令大全(转载)
    一种保护眼睛的好方法
    关于oracle自动编号
    An Algorithm Summary of Programming Collective Intelligence (1)
    An Algorithm Summary of Programming Collective Intelligence (3)
    An Algorithm Summary of Programming Collective Intelligence (4)
  • 原文地址:https://www.cnblogs.com/dudu/p/9116403.html
Copyright © 2011-2022 走看看