asp.net core 2.0使用JWT认证园子里已经有挺多帖子了,但开发中发现认证未授权情况下返回的401状态码是没有任何信息的,业务中可能有需要返回一串错误的Json信息。在这里我分享一个自定义错误页面内容信息的方法,使用该扩展方法还可以捕获异常,将异常信息也转为json。

  1.新建一个Api接口统一返回类ApiResult.cs(可替换成自己的)。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;namespace Jom.WebApi.Config
{public class ApiResult{public bool Success { get; set; } = true;public string Msg { get; set; } = "";public string Type { get; set; } = "";public object Data { get; set; } = "";public object DataExt { get; set; } = "";}
}

  2.建立中间件ErrorHandlingMiddleware.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;namespace Jom.WebApi.Config
{public class ErrorHandlingMiddleware{private readonly RequestDelegate next;public ErrorHandlingMiddleware(RequestDelegate next){this.next = next;}public async Task Invoke(HttpContext context){try{await next(context);}catch (Exception ex){var statusCode = context.Response.StatusCode;if (ex is ArgumentException){statusCode = 200;}await HandleExceptionAsync(context, statusCode, ex.Message);}finally{var statusCode = context.Response.StatusCode;var msg = "";if (statusCode == 401){msg = "未授权";}else if (statusCode == 404){msg = "未找到服务";}else if (statusCode == 502){msg = "请求错误";}else if (statusCode != 200){msg = "未知错误";}if (!string.IsNullOrWhiteSpace(msg)){await HandleExceptionAsync(context, statusCode, msg);}}}//异常错误信息捕获,将错误信息用Json方式返回private static Task HandleExceptionAsync(HttpContext context, int statusCode, string msg){var result = JsonConvert.SerializeObject(new ApiResult() { Success=false,Msg=msg,Type= statusCode.ToString() });context.Response.ContentType = "application/json;charset=utf-8";return context.Response.WriteAsync(result);}}//扩展方法public static class ErrorHandlingExtensions{public static IApplicationBuilder UseErrorHandling(this IApplicationBuilder builder){return builder.UseMiddleware<ErrorHandlingMiddleware>();}}
}

  3.最后只要在Startup.cs中的Configure方法中加上一句,在Startup.cs中添加引用using Jom.WebApi.Config;使用扩展方法ErrorHandlingExtensions()使用错误码处理中间件。

//请求错误提示配置app.UseErrorHandling();

  完整的Configure方法

public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}//请求错误提示配置
            app.UseErrorHandling();//使用认证授权
            app.UseAuthentication();//使用mvcapp.UseMvc(routes =>{routes.MapRoute(name: "default",template: "api/{controller}/{action}/{id?}",defaults: new { controller = "Values", action = "Get" });});}

  最后就完成了自定义401页面内容,同时还可以定义其他状态码如403,404,502,503等等,同时api接口报异常也将转化为特定的JSON格式。

postman中请求返回

转载于:https://www.cnblogs.com/jomzhang/p/9253647.html

asp.net core 自定义401和异常显示内容(JWT认证、Cookie Base认证失败显示内容)相关推荐

  1. asp.net core 自定义 Policy 替换 AllowAnonymous 的行为

    asp.net core 自定义 Policy 替换 AllowAnonymous 的行为 Intro 最近对我们的服务进行了改造,原本内部服务在内部可以匿名调用,现在增加了限制,通过 identit ...

  2. asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程...

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...

  3. asp.net core 自定义基于 HttpContext 的 Serilog Enricher

    asp.net core 自定义基于 HttpContext 的 Serilog Enricher Intro 通过 HttpContext 我们可以拿到很多有用的信息,比如 Path/QuerySt ...

  4. ASP.NET Core 中间件Diagnostics使用 异常和错误信息

    ASP.NET Core 中间件Diagnostics使用 异常和错误信息 参考文章: (1)ASP.NET Core 中间件Diagnostics使用 异常和错误信息 (2)https://www. ...

  5. 解决 ASP.NET Core 自定义错误页面对 Middleware 异常无效的问题

    我们基于 Razor Class Library 实现了自定义错误页面的公用类库(详见之前的随笔),但是在实际使用时发现如果在 middleware 中发生了异常,则不能显示自定义错误页面,而是返回默 ...

  6. asp.net core 自定义 Content-Type

    asp.net core 实现支持自定义 Content-Type Intro 我们最近有一个原本是内网的服务要上公网,在公网上有一层 Cloudflare 作为网站的公网流量提供者,CloudFla ...

  7. asp.net core web mvc之异常

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

  8. asp.net core 自定义异常处理中间件

    Intro 在 asp.net core 中全局异常处理,有时候可能不能满足我们的需要,可能就需要自己自定义一个中间件处理了,最近遇到一个问题,有一些异常,不希望记录错误日志,目前主要是用户请求取消导 ...

  9. asp.net core自定义依赖注入容器,替换自带容器

    依赖注入 在asp.net core程序中,众所周知,依赖注入基本上贯穿了整个项目,以通用的结构来讲解,控制器层(Controller层)依赖业务层(Service层),业务层依赖于仓储层(Repos ...

最新文章

  1. 机器人控制与感知有感
  2. python拆堆和堆叠的操作_堆叠框架的Python / Tkinter退出按钮
  3. Java Excel 插入图片
  4. Kindeditor富文本编辑器使用
  5. Google Hangouts支持使用Firefox WebRTC
  6. bootloader启动流程分析
  7. 如何在一个月内让QQ农场冲上40级
  8. L101 L201 ME35 ME350 SX235W EP-801A ME535 清零软件
  9. BZOJ4011:[HNOI2015]落忆枫音(DP,拓扑排序)
  10. openssl SM2签名密钥生成
  11. 易飞ERP工作流解决方案之【第三方OA系统集成】
  12. Linux使用命令行工具管理用户和组
  13. python ffmpeg剪辑视频_FFMPEG剪辑大法
  14. 天津智慧路灯+“新基建”示范区建设启动、沪苏通长江公铁大桥
  15. 体验与对比新版EBS gp3 vs gp2
  16. 当Apple TV+的生态化反梦,撞上一个“日渐昂贵”的流媒体市场
  17. java如何添加同名的xml节点_java – 解组具有多个同名元素的XML JAXB
  18. 学术论文等级划分(包括EI会议论文)
  19. 谷歌浏览器驱动器下载网址
  20. 我用Python合成大西瓜!

热门文章

  1. java连接mongodb的jar包_Java实战之管家婆记账系统(1)——项目简述
  2. JWT 实现微服务鉴权
  3. sit matlab,LabView SIT工具包的使用和安装说明
  4. 图片高亮处理编程_GMT语法高亮-智能提示-代码补全插件
  5. thinkphp json_原创干货 | Thinkphp序列化合总
  6. 计算机net use命令使用,网络命令net之net use应用
  7. java中插入排序实例_java中对插入排序的理解以及实例
  8. vant按需引入没样式_vue vant-ui样式出不来的问题
  9. mysql建表时外检怎么创建_MySQL创建表时加入的约束以及外键约束的的意义
  10. 工业交换机与工业路由器的区别