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 的同时将之前的一堆代码全丢进了垃圾桶。

  • 相关阅读:
    Oracle执行计划(三)
    执行计划-数据访问方式(全表扫描与4种索引的方式)
    比较两个文件内容是否相同
    设置myeclipse控制台输出到文件中
    Java出现NoSuchElementException异常
    Spring-Aop编程(三)-AspectJ
    Spring AOP编程(二)-AOP实现的三种方式
    Spring AOP编程(一)-AOP介绍
    java.lang.OutOfMemoryError: GC overhead limit exceeded异常处理
    Spring 属性依赖注入
  • 原文地址:https://www.cnblogs.com/dudu/p/9116403.html
Copyright © 2011-2022 走看看