(精华)2020年9月18日 ASP.NET Core 异常页面详解
发布日期:2021-06-29 15:12:28 浏览次数:3 分类:技术文章

本文共 7168 字,大约阅读时间需要 23 分钟。

内置异常页面

public static class Sample02    {
public static void Run() {
Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .ConfigureServices(services => services.AddRouting()) .Configure(app => app .UseDeveloperExceptionPage() .UseRouting() .UseEndpoints(routeBuilder => routeBuilder.MapGet("/", HandleAsync)) )) .Build() .Run(); } private static Task HandleAsync(HttpContext context) {
return Task.FromException(new InvalidOperationException("This is Exception")); } }

自定义异常页面

public static class Sample03{
public static void Run() {
var options = new ExceptionHandlerOptions {
ExceptionHandler = context => context.Response.WriteAsync("Hello Exception!") }; Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .Configure(app => app .UseExceptionHandler(options) .Run(context => Task.FromException(new InvalidOperationException("Throw Exception"))) )) .Build() .Run(); }}
public static class Sample04    {
public static void Run() {
Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .Configure(app => app .UseExceptionHandler(applicationBuilder => applicationBuilder .Run(context => context.Response.WriteAsync("Hello Exception!")) ) .Run(context => Task.FromException(new InvalidOperationException("这是一个异常"))) )) .Build() .Run(); } }
public static class Sample05    {
public static void Run() {
Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .ConfigureServices(services => services.AddRouting()) .Configure(app => app .UseExceptionHandler("/error") .UseRouting() .UseEndpoints(routeBuilder => routeBuilder.MapGet("error", HandleAsync)) .Run(context => Task.FromException(new InvalidOperationException("Throw Exception"))) )) .Build() .Run(); } private static Task HandleAsync(HttpContext context) {
return context.Response.WriteAsync("Hello Exception"); } }

状态码错误页面

public static class Sample06    {
public static void Run() {
Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .Configure(app => app .UseStatusCodePages("text/plain", "Error ({0})") .Run(context => Task.Run(() => context.Response.StatusCode = 500)) )) .Build() .Run(); } }
public static class Sample07    {
private static readonly Random Random = new Random(); public static void Run() {
Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .Configure(app => app .UseStatusCodePages(Handler) .Run(context => Task.Run(() => context.Response.StatusCode = Random.Next(400,599))) )) .Build() .Run(); } private static async Task Handler(StatusCodeContext context) {
var response = context.HttpContext.Response; if (response.StatusCode < 500) {
await response.WriteAsync($"Client Error ({response.StatusCode})"); } else {
await response.WriteAsync($"Server Error ({response.StatusCode})"); } } }
public static class Sample08    {
private static readonly Random Random = new Random(); public static void Run() {
Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .ConfigureServices(collection => collection.AddRouting()) .Configure(app => app .UseStatusCodePagesWithRedirects("/error/{0}") .UseRouting() .UseEndpoints(routeBuilder => routeBuilder.MapGet("error/{status_code}", HandlerError)) .Run(context => Task.Run(() => context.Response.StatusCode = Random.Next(400,599))) )) .Build() .Run(); } private static async Task HandlerError(HttpContext context) {
var code = context.GetRouteData().Values["status_code"]; await context.Response.WriteAsync($"Error ({code})"); } }
public static class Sample09    {
private static readonly Random Random = new Random(); public static void Run() {
Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .ConfigureServices(collection => collection.AddRouting()) .Configure(app => app .UseStatusCodePagesWithReExecute("/error/{0}") .UseRouting() .UseEndpoints(routeBuilder => routeBuilder.MapGet("error/{status_code}", HandlerError)) .Run(context => Task.Run(() => context.Response.StatusCode = Random.Next(400,599))) )) .Build() .Run(); } private static async Task HandlerError(HttpContext context) {
var code = context.GetRouteData().Values["status_code"]; await context.Response.WriteAsync($"Error ({code})"); } }

实际中使用异常设置

首先安装如下包

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
class Program    {
static void Main(string[] args) {
var options = new DeveloperExceptionPageOptions {
SourceCodeLineCount = 3 }; Host.CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder .ConfigureServices(collection => collection .AddRouting() .AddControllersWithViews() .AddRazorRuntimeCompilation()) .Configure(app=>app .UseDeveloperExceptionPage(options) .UseRouting() .UseEndpoints(routeBuilder => routeBuilder.MapControllers())) ) .Build() .Run(); } } public class HomeController : Controller {
[HttpGet("/")] public IActionResult Index() => View(); }

转载地址:https://codeboy.blog.csdn.net/article/details/108524619 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(精华)2020年9月18日 ASP.NET Core 路由解析详解
下一篇:(精华)2020年9月19日 ASP.NET Core 认证授权详解

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月20日 22时58分06秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

在 RT-Thread Studio 上使用 RT-Thread Nano 2019-04-29
开源项目|软件包应用作品:通用物联网系统平台 2019-04-29
【经验分享】RT-Thread UART设备驱动框架初体验(中断方式接收带\r\n的数据) 2019-04-29
单片机里面的CPU使用率是什么鬼? 2019-04-29
推荐一个优质Linux技术公众号-作者都是一线Linux代码贡献者们哦 2019-04-29
RT-Thread 编程风格指南 2019-04-29
95后高校电子教师,软硬兼修有趣有料! 2019-04-29
使用 STM32 通用 Bootloader ,让 OTA 更加 Easy 2019-04-29
Cache 的基本概念与工作原理 2019-04-29
装机量超亿台 RISC-V +IoT OS!中科蓝讯与RT-Thread战略合作,共推自主物联网生态发展 2019-04-29
Android开发技巧!字节跳动Android研发岗这些知识点内部泄露出来了,面试真题解析 2019-04-29
Android开发技巧!高级Android晋升之View渲染机制,Android篇 2019-04-29
Android开发知识体系!Android面试吃透这一篇就没有拿不到的offer!挥泪整理面经 2019-04-29
Android开发知识体系!这份354页笔记的Android进阶知识+大厂高频面试题,薪资翻倍 2019-04-29
Android开发社招面试经验:你所不知道的Android原生开发的现状,算法太TM重要了 2019-04-29
Android开发还不会这些?Activity的6大难点,你会几个?成功拿下大厂offer 2019-04-29
Android程序员必会!Android面试必刷的200道真题,附答案 2019-04-29
Android面试回忆录:掌握这些Android开发热门前沿知识,完整PDF 2019-04-29
Android技术篇!Android面试吃透这一篇就没有拿不到的offer!面试必问 2019-04-29
Android开发必须会的技能!带你全面理解View的绘制流程,Android校招面试指南 2019-04-29