首页 > 编程语言 >ASP.NET Core 异常处理

ASP.NET Core 异常处理

时间:2023-05-20 12:11:49浏览次数:43  
标签:Core ASP app NET 异常 页面

此文只是从中摘录整理下自己感兴趣的部分,以便备忘和方便查找回顾,详见:


由于 ASP.NET Core 是一个同时处理多个请求的 web 应用框架,所以在处理某个请求过程中抛出的异常并不会导致整个应用的终止。

NuGet 包 Microsoft.AspNetCore.Diagnostics 中提供了几个与异常处理相关的中间件。当 ASP.NET Core 应用在处理请求过程中出现错误时,我们可以利用他们将原生的或者定制的错误信息作为响应内容发送给客户端。

ASP.NET Core 应用在进行请求处理时出现的任何错误都会被写入日志,所以可以通过注册相应的 ILoggerProvider 对象来获取写入的错误日志信息。

显示开发者异常页面

该页面只是在开发环境给开发人员看的,会将异常详细信息和基于当前请求的上下文直接现在在错误页面中,这位开发人员的纠错诊诊断提供了极大的便利。开发者异常页面的呈现是利用一个名为 DeveloperExceptionPageMiddleware 的中间件完成的,正确使用方式如下:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
}

呈现一个定制的错误页面

但是在生产环境下,我们倾向于为最终的用户呈现一个定制的错误页面,这可以通过注册另一个名为 ExceptionHandlerMiddleware 的中间件来实现。

即,先定义一个异常处理器(ExceptionHandlerMiddle)来处理抛出的异常,实际上就是一个 RequestDelegate 对象。

        //Startup.cs
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {  
        	var options = new ExceptionHandlerOptions { ExceptionHandler = HandleAsync };
            app.UseExceptionHandler(options);
            
            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=TestException}/{id?}");
            });

            Task HandleAsync(HttpContext context)
                => context.Response.WriteAsync("Unhandled exception occurred!");
        }
        //HomeController.cs
		public IActionResult TestException()
        {
            throw new Exception("故意炮哥异常看看。");
        }	

如果应用已经设置了一个错误页面,并且这个错误页面有一个固定的路径,那么我们在进行异常处理的时候,就没有必要提供这个RequestDelegate对象,只需要重定向到错误页面指向的路径即可,如:

app.UseExceptionHandler("/home/error");


更新于:2023.5.20

标签:Core,ASP,app,NET,异常,页面
From: https://www.cnblogs.com/idasheng/p/17417023.html

相关文章

  • .net core 静态文件跨域问题
    app.UseStaticFiles(newStaticFileOptions{OnPrepareResponse=(c)=>{c.Context.Response.Headers.Add("Access-Control-Allow-Origin","*");......
  • ASP.NET Core(一) 承载系统、管道、概述
    此文只是从中摘录整理下自己感兴趣的部分,以便备忘和方便查找回顾,详见:Artech-博客园(cnblogs.com)《ASP.NETCore6框架揭秘》请务必先通读以下官网概述(15min~30min):ASP.NETCore基础知识概述|MicrosoftLearn承载系统借助.NETCore提供的承载系统(Hosting),我们可......
  • ASP.NET Core(二):IOC、DI,即依赖注入和控制反转
    此文只是从中摘录整理下自己感兴趣的部分,以便备忘和方便查找回顾,详见:Artech-博客园(cnblogs.com)《ASP.NETCore6框架揭秘》整个ASP.NETCore框架建立在一个底层的依赖注入框架之上,它使用依赖注入容器提供所需的服务对象。服务服务通常由组件提供,组件可以理解成......
  • XAF中XPO与EFCore的探讨
    前言首先抛出一个问题,在XAF项目中,我们现在可不可以选择EFCore?每个人可能都有自己的答案,这也没有什么标准答案。下面是我的个人看法,在刚接触XAF时,如何选择ORM,我也是犹豫了许久,最终选择了XPO,主要基于以下几点考虑1.XPO是DEV的产品,支持力度及倾向性要比EFCore高2.XPO是XAF最开始支......
  • .NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移
    前言接上期文章《.NET6项目连接数据库方式方法》,有人问了我几个问题,现在就这几个问题,拓展延申一下创建实体类、数据库。把ORM框架和数据迁移都写进去。安装ORM框架,这里我们采用EFCore安装EFCore我的项目是在Linux上创建的,使用的是vscode开发工具远程开发。为了方便大家阅读和......
  • .NET 通过源码深究依赖注入原理
    依赖注入(DI)是.NET中一个非常重要的软件设计模式,它可以帮助我们更好地管理和组织组件,提高代码的可读性,扩展性和可测试性。在日常工作中,我们一定遇见过这些问题或者疑惑。Singleton服务为什么不能依赖Scoped服务?多个构造函数的选择机制?源码是如何识别循环依赖的?虽然我们可......
  • ASP.NET Core 接口文档解决方案(swagger)
    api文档解决方案很多,先介绍我用过的两种方案:比较项SwaggerShowdoc官网帮助说明--ShowDoc知名度较大、net6官方推荐国产在线测试支持不支持文档定义方式注释为主注释为主生成过程自动根据接口参数和返回类型生成相关说明。接口文档的一切都需在......
  • 一个.Net开发的功能强大、易于使用的流媒体服务器和管理系统
    推荐一个视频管理系统,非常适合个人或者公司打造视频网站。项目简介这是基于.NetCore开发的,跨平台的开源项目;支持多种音视频格式,如MP3、MP4、AVI、WMV、FLV等;支持本地管理与远程管理,让管理员可以轻松的管理视频资源。而且该项目还提供多平台的客户端,支持Web、桌面、Liunx、安卓......
  • 基于ResNet网络架构训练图像分类模型
    目录1.数据预处理(1)导包(2)数据读取(3)制作数据(4)读取标签对应的实际名字(5)展示数据2.构建网络(1)加载已有网络模型(2)选择需不需要冻住哪些层(3)重新加入全连接层传入自己的分类数(4)网络搭建结果3.训练自己的全连接层4.训练所有层5.测试网络效果(1)加载训练好的模型(2)测试数......
  • 记一次将 .netcore 项目用 IIS 进程调试
    环境:win10,VisualStudio2022 在.netframework年代,我们都习惯用iis进程调试代码。因为用F5调试代码效率太低下。现在.netcore时代,这种好习惯可不能丢。简单记录一下,我的操作过程。 1.首先用IIS挂载网站,看能不能把发布的好的网站跑起来2.其次用IIS增加网站,......