基于 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.NET Core 2.1 MVC - 无法设置从 Web api 响应接收到的 cookie
(17)ASP.NET Core EF基于数据模型创建数据库
带有 Angular 6 的 Asp.Net Core 2.1 中的 Windows 身份验证 - Chrome 连续登录提示