在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
注意:文中使用的是 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 的同时将之前的一堆代码全丢进了垃圾桶。 |
请发表评论