(精华)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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月20日 22时58分06秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
在 RT-Thread Studio 上使用 RT-Thread Nano
2019-04-29
开源项目|软件包应用作品:通用物联网系统平台
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
Android开发技巧!高级Android晋升之View渲染机制,Android篇
2019-04-29
Android程序员必会!Android面试必刷的200道真题,附答案
2019-04-29
Android面试回忆录:掌握这些Android开发热门前沿知识,完整PDF
2019-04-29
Android技术篇!Android面试吃透这一篇就没有拿不到的offer!面试必问
2019-04-29