基于 ASP.NET Core 2.1 的 Razor Class Library 实现自定义错误页面的公用类库

Posted dudu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 ASP.NET Core 2.1 的 Razor Class Library 实现自定义错误页面的公用类库相关的知识,希望对你有一定的参考价值。

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

以上是关于基于 ASP.NET Core 2.1 的 Razor Class Library 实现自定义错误页面的公用类库的主要内容,如果未能解决你的问题,请参考以下文章

没有指定 authenticationScheme,也没有找到 DefaultChallengeScheme - ASP.NET core 2.1

ASP.Net Core 2.1 API JWT 无 cookie 会话?

Asp Core MVC 2.1授权基于每个用户的策略?

ASP.NET Core 2.1 MVC - 无法设置从 Web api 响应接收到的 cookie

(17)ASP.NET Core EF基于数据模型创建数据库

带有 Angular 6 的 Asp.Net Core 2.1 中的 Windows 身份验证 - Chrome 连续登录提示