ASP.NET CORE之中间件-自定义异常中间件

- public class Startup
- {
- // This method gets called by the runtime. Use this method to add services to the container.
- // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
- public void ConfigureServices(IServiceCollection services)
- {
- }
- // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
- public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- app.UseRouting();
- app.UseEndpoints(endpoints =>
- {
- endpoints.MapGet("/", async context =>
- {
- await context.Response.WriteAsync("Hello World!");
- });
- });
- }
- }
- public static class ApplicationBuilderExtensions
- {
- public static IApplicationBuilder UseExceptionHandle(this IApplicationBuilder app)
- {
- app.UseMiddleware<ExceptionHandleMiddleware>();//UseMiddleware添加中间件
- return app;
- }
- }
- public class ExceptionHandleMiddleware
- {
- private readonly RequestDelegate _next;
- private readonly ILogger _logger;
- public ExceptionHandleMiddleware( RequestDelegate next, ILogger<ExceptionHandleMiddleware> logger)
- {
- _next = next;
- _logger = logger;
- }
- public async Task InvokeAsync(HttpContext httpContext)
- {
- try
- {
- await _next(httpContext);
- }
- catch (Exception ex)
- {
- await HandleExceptionAsync(httpContext, ex);
- }
- }
- private Task HandleExceptionAsync(HttpContext context, Exception exception)
- {
- context.Response.ContentType = "application/json";
- context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
- var error = exception.ToString();
- _logger.LogError(error);
- return context.Response.WriteAsync(JsonConvert.SerializeObject(ResultModel.Failed(error), new JsonSerializerSettings
- {
- ContractResolver = new CamelCasePropertyNamesContractResolver()
- }));
- }
- }
- /// <summary>
- /// 返回结果模型接口
- /// </summary>
- public interface IResultModel
- {
- /// <summary>
- /// 是否成功
- /// </summary>
- [JsonIgnore]
- bool Successful { get; }
- /// <summary>
- /// 错误
- /// </summary>
- string Msg { get; }
- }
- /// <summary>
- /// 返回结果模型泛型接口
- /// </summary>
- /// <typeparam name="T"></typeparam>
- public interface IResultModel<T> : IResultModel
- {
- /// <summary>
- /// 返回数据
- /// </summary>
- T Data { get; }
- }
- /// <summary>
- /// 返回结果
- /// </summary>
- public class ResultModel<T> : IResultModel<T>
- {
- /// <summary>
- /// 处理是否成功
- /// </summary>
- [JsonIgnore]
- public bool Successful { get; private set; }
- /// <summary>
- /// 错误信息
- /// </summary>
- public string Msg { get; private set; }
- /// <summary>
- /// 状态码
- /// </summary>
- public int Code => Successful ? : ;
- /// <summary>
- /// 返回数据
- /// </summary>
- public T Data { get; private set; }
- /// <summary>
- /// 成功
- /// </summary>
- /// <param name="data">数据</param>
- /// <param name="msg">说明</param>
- public ResultModel<T> Success(T data = default, string msg = "success")
- {
- Successful = true;
- Data = data;
- Msg = msg;
- return this;
- }
- /// <summary>
- /// 失败
- /// </summary>
- /// <param name="msg">说明</param>
- public ResultModel<T> Failed(string msg = "failed")
- {
- Successful = false;
- Msg = msg;
- return this;
- }
- }
- /// <summary>
- /// 返回结果
- /// </summary>
- public static class ResultModel
- {
- /// <summary>
- /// 成功
- /// </summary>
- /// <param name="data">返回数据</param>
- /// <returns></returns>
- public static IResultModel Success<T>(T data = default(T))
- {
- return new ResultModel<T>().Success(data);
- }
- /// <summary>
- /// 成功
- /// </summary>
- /// <returns></returns>
- public static IResultModel Success()
- {
- return Success<string>();
- }
- /// <summary>
- /// 失败
- /// </summary>
- /// <param name="error">错误信息</param>
- /// <returns></returns>
- public static IResultModel Failed<T>(string error = null)
- {
- return new ResultModel<T>().Failed(error ?? "failed");
- }
- /// <summary>
- /// 失败
- /// </summary>
- /// <returns></returns>
- public static IResultModel Failed(string error = null)
- {
- return Failed<string>(error);
- }
- /// <summary>
- /// 根据布尔值返回结果
- /// </summary>
- /// <param name="success"></param>
- /// <returns></returns>
- public static IResultModel Result<T>(bool success)
- {
- return success ? Success<T>() : Failed<T>();
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="success"></param>
- /// <returns></returns>
- public static IResultModel Result(bool success)
- {
- return success ? Success() : Failed();
- }
- /// <summary>
- /// 数据已存在
- /// </summary>
- /// <returns></returns>
- public static IResultModel HasExists => Failed("数据已存在");
- /// <summary>
- /// 数据不存在
- /// </summary>
- public static IResultModel NotExists => Failed("数据不存在");
- }
ASP.NET CORE之中间件-自定义异常中间件的更多相关文章
- 在ASP.NET Core 中使用Cookie中间件
在ASP.NET Core 中使用Cookie中间件 ASP.NET Core 提供了Cookie中间件来序列化用户主题到一个加密的Cookie中并且在后来的请求中校验这个Cookie,再现用户并且分 ...
- asp.net core mvc 管道之中间件
asp.net core mvc 管道之中间件 http请求处理管道通过注册中间件来实现各种功能,松耦合并且很灵活 此文简单介绍asp.net core mvc中间件的注册以及运行过程 通过理解中间件 ...
- 在ASP.NET Core 中使用Cookie中间件 (.net core 1.x适用)
在ASP.NET Core 中使用Cookie中间件 ASP.NET Core 提供了Cookie中间件来序列化用户主题到一个加密的Cookie中并且在后来的请求中校验这个Cookie,再现用户并且分 ...
- Asp.Net Core入门之自定义中间件
什么是中间件? 这里引用官方解释: 中间件是用于组成应用程序管道来处理请求和响应的组件.管道内的每一个组件都可以选择是否将请求交给下一个组件.并在管道中调用下一个组件之前和之后执行某些操作.请求委托被 ...
- asp.net core 3.1 自定义中间件实现jwt token认证
asp.net core 3.1 自定义中间件实现jwt token认证 话不多讲,也不知道咋讲!直接上代码 认证信息承载对象[user] /// <summary> /// 认证用户信息 ...
- ASP.NET Core 使用 URL Rewrite 中间件实现 HTTP 重定向到 HTTPS
在传统 ASP.NET 程序中,我们可以通过配置 IIS 的“URL 重写”功能实现将 HTTP 请求重定向为 HTTPS .但是该方法在 ASP.NET Core 应用中不再工作.在 ASP.NET ...
- asp.net core中写入自定义中间件
首先要明确什么是中间件?微软官方解释:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?tabs=aspnet ...
- ASP.NET Core 2.2在中间件内使用有作用域的服务
服务生存期 为每个注册的服务选择适当的生存期.可以使用以下生存期配置ASP.NET Core服务: 暂时 暂时生存期服务 (AddTransient) 是每次从服务容器进行请求时创建的. 这种生存期适 ...
- ASP.NET CORE 管道模型及中间件使用解读
说到ASP.NET CORE 管道模型不得不先来看看之前的ASP.NET 的管道模型,两者差异很大,.NET CORE 3.1 后完全重新设计了框架的底层,.net core 3.1 的管道模型更加灵 ...
随机推荐
- cb18a_c++_修改string对象的方法
cb18a_c++_修改string对象的方法s.insert(p,t)s.insert(p, 'A'); //迭代器前插入As.insert<p,n,t)s.insert(p, 3, 'B') ...
- 一文带你了解Redis持久化完整版本
本文讲解知识点 持久化的简介 RDB AOF RDB与AOF的区别 持久化应用场景 对于持久化这个功能点,其实很简单没有那么复杂 演示环境 centos7.0 redis4.0 redis存放目录:/ ...
- 循序渐进VUE+Element 前端应用开发(12)--- 整合ABP框架的前端登录处理
VUE+Element 前端是一个纯粹的前端处理,前面介绍了很多都是Vue+Element开发的基础,从本章随笔开始,就需要进入深水区了,需要结合ABP框架使用(如果不知道,请自行补习一下我的随笔:A ...
- 吃货联盟订餐系统 源代码 Java初级小项目
咳咳,今天博主给大家写一个小的项目:吃货联盟订餐系统.博主不是大神(互联网架构师的路上ing),也是小白一个,不过是刚入门的小白^_^.项目功能也很简单:只是模拟日常的订餐流程呦,所以有错误以及功能不 ...
- intellij配置github
一.在IDEA中设置Git,在File-->Setting->Version Control-->Git-->Path to Git executable选择你的git安装后的 ...
- BOM问题-对于php的影响
甲.BOM说明 BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记.这个标记是可选的,UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明当前编码方式.但如果文件 ...
- Python之浅谈多态和封装
目录 组合 什么是组合 为什么使用组合 多态和多态性 多态 什么是多态? 多态性 好处 多态性 什么是多态性 封装 封装是什么意思? 隐藏 如何用代码实现隐藏 python 实际上是可以访问隐藏属性的 ...
- CSS选择器整理以及优先级介绍
一.基础选择器 选择器 名称 描述 兼容性 * 通配选择器 选择所有的元素 ie6+ E 元素选择器 选择指定的元素 ie6+ #idName id选择器 选择id属性等于idName的元素 ie6+ ...
- Linux中清空docker容器日志
新建文件docker-clear-log,放在/usr/local/bin/目录下,文件内容如下: #!/bin/bash -e if [[ -z $ ]]; then echo "No c ...
- 一行一行源码分析清楚AbstractQueuedSynchronizer
“365篇原创计划”第二十四篇. 今天呢!灯塔君跟大家讲: 一行一行源码分析清楚AbstractQueuedSynchronizer 在分析 Java 并发包 java.util.concurren ...