asp.net core web mvc之异常
与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之异常相关推荐
- ASP .NET Core Web MVC系列教程四:添加模型
系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程三:添加视图 ...
- ASP .NET Core Web MVC系列教程三:添加视图
系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程二:添加控制器 ...
- ASP .NET Core Web MVC系列教程二:添加控制器
系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程一:创建一个W ...
- ASP .NET Core Web MVC系列教程一:创建一个Web应用程序
系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 从Visual Studio中选择" 创建新项目". 选 ...
- ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序
本系列教程翻译自微软官方教程,官方教程地址:Get started with ASP.NET Core MVC | Microsoft Docs 本系列教程介绍了构建MVC Web应用程序的基础知识. ...
- asp.net core web api之异常
官方建议用app.UseExceptionHandler("/error")来集中处理异常,本例是一个具体的应用. 比如项目中有一个ViewModel,要求Name最大长度为5 / ...
- ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)...
在上一章中主要和大家分享了在ASP.NET Core中如何使用Autofac替换自带DI进行构造函数的批量依赖注入,本章将和大家继续分享如何使之能够同时支持属性的批量依赖注入. 约定: 1.仓储层接口 ...
- ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)...
在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入. P ...
- ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)...
在正式进入主题之前我们来看下几个概念: 一.依赖倒置 依赖倒置是编程五大原则之一,即: 1.上层模块不应该依赖于下层模块,它们共同依赖于一个抽象. 2.抽象不能依赖于具体,具体依赖于抽象. 其中上层就 ...
最新文章
- Adam那么棒,为什么还对SGD念念不忘 (3)—— 优化算法的选择与使用策略
- 从量子物理到AI医疗,这位清华博士后想用十年弥补病理医生的百年缺口
- 6. 函数参数 与 展开运算符
- react封装子组件弹框
- word2010添加b5纸张大小_纸张幅面规格尺寸你了解吗?
- 什么是MCU里应尽量遵循的寄存器谨慎赋值法?
- Nature调查:中国博士生们的科研围城
- Oracle 11g RAC 修改IP
- 机器学习系列------1. GBDT算法的原理
- Problem 1108 - 淼·诺贝尔
- python+sklearn利用特征文件来训练和测试模型并使用joblib方法持久化存储模型
- Qt配置OpenCV教程,无需复杂的编译过程,(详细版)
- 2021年JAVA面试题~集合篇附带答案
- tkmybatis 权威指南 官方文档
- python网址编码转换_python实现中文转换url编码的方法
- 酒店预订管理系统可行性分析
- 2021年安全员-C证(山东省-2020版)考试及安全员-C证(山东省-2020版)模拟试题
- 2021阿里巴巴国际站产品关键词来源(二)
- 通过路由器端口映射实现远程桌面连接
- linux用户目录互信,linux 互信不生效
热门文章
- UVA - 11181 数学
- 编译源码 JAVA out of memory
- Unity手游之路lt;七gt;角色控制器
- 如何在Microsoft Excel中将文本转换为日期值
- windows复制文件路径_如何在Windows 10上复制文件的完整路径
- [Hadoop in China 2011] 中兴:NoSQL应用现状及电信业务实践
- Centos6.8 安装spark-2.3.1 以及 scala-2.12.2
- 期待已久的Java 9 今日发布
- jenkins maven testng selenium自动化持续集成
- Centos7 安装gitlab 8.7.5