与web api类似,asp.net core web mvc模板也是利用ExceptionHandler来处理错误,在starup的Configure配置数据发生时导向的/home/error

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Home/Error");app.UseHsts();}//处理404数据的显示信息app.UseStatusCodePages(async context =>{context.HttpContext.Response.ContentType = "text/plain";await context.HttpContext.Response.WriteAsync($"找不到资源,状态码: {context.HttpContext.Response.StatusCode}");});//……}

异常业务类定义如下

using System;
namespace WebError
{/// <summary>/// 产品异常/// </summary>public class DaMeiException : ApplicationException{/// <summary>/// /// </summary>/// <param name="message"></param>public DaMeiException(string message) : base(message){}}/// <summary>/// His项目异常/// </summary>public class HisException : DaMeiException{/// <summary>/// /// </summary>/// <param name="message"></param>public HisException(string message) : base(message){}}/// <summary>/// Lis项目异常/// </summary>public class LisException : DaMeiException{/// <summary>/// /// </summary>/// <param name="message"></param>public LisException(string message) : base(message){}}/// <summary>/// 模块异常/// </summary>public class RegisteredException : HisException{/// <summary>/// /// </summary>/// <param name="message"></param>public RegisteredException(string message) : base(message){}}
}

Controller.cs中,因为web mvc是有view的,所以把错误返回到ErrorViewModel到View前端进行显示。同样,业务异常类DaMeiException作为错误分类处理的标志,从而完成异常的分类处理。

        public IActionResult Privacy(){var ran = new Random();switch (ran.Next(1, 4)){case 1:int i = 0;var j = 10 / i;return Ok();case 2:throw new RegisteredException("这是一个错误");default:return View();}}[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]public IActionResult Error(){var context = HttpContext.Features.Get<IExceptionHandlerFeature>();       //如果是业务自定义异常,进行特殊处理if (context.Error is DaMeiException){return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier, ErrorMessage = context.Error.Message, ErrorType = "His" });}else{return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier, ErrorMessage = context.Error.Message, ErrorType = "System" });}}

Error.schtml 完成具体数据的展示

@model ErrorViewModel
@{ViewData["Title"] = "错误";
}
<h1 class="text-danger">错误</h1>
<h2 class="text-danger">一个请求处理错误</h2>
@if (Model.ShowRequestId)
{<h3>@Model.ErrorType</h3><p><strong>请求ID:</strong> <code>@Model.RequestId</code></p><p>@Model.ErrorMessage</p>
}

每个框都有处理异常的方式,关键是要设计好业务系统中的异常关系,标准化异常处理的流程和格式,方便日志,监控系统采集汇总这些异常,为系统稳定提供保驾护航。

asp.net core web mvc之异常相关推荐

  1. ASP .NET Core Web MVC系列教程四:添加模型

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程三:添加视图 ...

  2. ASP .NET Core Web MVC系列教程三:添加视图

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程二:添加控制器 ...

  3. ASP .NET Core Web MVC系列教程二:添加控制器

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程一:创建一个W ...

  4. ASP .NET Core Web MVC系列教程一:创建一个Web应用程序

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 从Visual Studio中选择" 创建新项目". 选 ...

  5. ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序

    本系列教程翻译自微软官方教程,官方教程地址:Get started with ASP.NET Core MVC | Microsoft Docs 本系列教程介绍了构建MVC Web应用程序的基础知识. ...

  6. asp.net core web api之异常

    官方建议用app.UseExceptionHandler("/error")来集中处理异常,本例是一个具体的应用. 比如项目中有一个ViewModel,要求Name最大长度为5 / ...

  7. ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)...

    在上一章中主要和大家分享了在ASP.NET Core中如何使用Autofac替换自带DI进行构造函数的批量依赖注入,本章将和大家继续分享如何使之能够同时支持属性的批量依赖注入. 约定: 1.仓储层接口 ...

  8. ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)...

    在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入. P ...

  9. ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)...

    在正式进入主题之前我们来看下几个概念: 一.依赖倒置 依赖倒置是编程五大原则之一,即: 1.上层模块不应该依赖于下层模块,它们共同依赖于一个抽象. 2.抽象不能依赖于具体,具体依赖于抽象. 其中上层就 ...

最新文章

  1. Adam那么棒,为什么还对SGD念念不忘 (3)—— 优化算法的选择与使用策略
  2. 从量子物理到AI医疗,这位清华博士后想用十年弥补病理医生的百年缺口
  3. 6. 函数参数 与 展开运算符
  4. react封装子组件弹框
  5. word2010添加b5纸张大小_纸张幅面规格尺寸你了解吗?
  6. 什么是MCU里应尽量遵循的寄存器谨慎赋值法?
  7. Nature调查:中国博士生们的科研围城
  8. Oracle 11g RAC 修改IP
  9. 机器学习系列------1. GBDT算法的原理
  10. Problem 1108 - 淼·诺贝尔
  11. python+sklearn利用特征文件来训练和测试模型并使用joblib方法持久化存储模型
  12. Qt配置OpenCV教程,无需复杂的编译过程,(详细版)
  13. 2021年JAVA面试题~集合篇附带答案
  14. tkmybatis 权威指南 官方文档
  15. python网址编码转换_python实现中文转换url编码的方法
  16. 酒店预订管理系统可行性分析
  17. 2021年安全员-C证(山东省-2020版)考试及安全员-C证(山东省-2020版)模拟试题
  18. 2021阿里巴巴国际站产品关键词来源(二)
  19. 通过路由器端口映射实现远程桌面连接
  20. linux用户目录互信,linux 互信不生效

热门文章

  1. UVA - 11181 数学
  2. 编译源码 JAVA out of memory
  3. Unity手游之路lt;七gt;角色控制器
  4. 如何在Microsoft Excel中将文本转换为日期值
  5. windows复制文件路径_如何在Windows 10上复制文件的完整路径
  6. [Hadoop in China 2011] 中兴:NoSQL应用现状及电信业务实践
  7. Centos6.8 安装spark-2.3.1 以及 scala-2.12.2
  8. 期待已久的Java 9 今日发布
  9. jenkins maven testng selenium自动化持续集成
  10. Centos7 安装gitlab 8.7.5