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

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向 NLP 任务的大模型 Prompt 设计

很久之前&#xff0c;我们介绍到&#xff0c;prompt是影响下游任务的关键所在&#xff0c;当我们在应用chatgpt进行nlp任务落地时&#xff0c;如何选择合适的prompt&#xff0c;对于SFT以及推理环节尤为重要。 不过&#xff0c;硬想不是办法&#xff0c;我们可以充分参考开源的…

生产Java应用程序中的十大异常类型-基于1B事件

Pareto记录原理&#xff1a;97&#xff05;的记录错误语句是由3&#xff05;的唯一错误引起的 在最新的数据整理帖子之后&#xff0c;我们收到了很多反馈和问题&#xff0c;在该文章中&#xff0c;我们显示97&#xff05;的记录错误是由10个唯一错误引起的 。 根据普遍的需求&…

教你制作QQ空间超高连通率背景音乐链接。

1.进入【搜搜音乐】http://music.soso.com/index.html 搜索你想要的歌曲名字。。。如下图&#xff1a; 2、 3.此链接地址并不能做背景链接&#xff0c;因为腾讯加密了&#xff0c;你只需将链接地址里的qq改成%71%71就可以作为背景音乐链接了。如图&#xff1a;

Java EE 8,当前状态是什么:自2015年底以来已完成工作的案例研究

对于那些密切关注Java EE的人来说&#xff0c;在过去的六个月中已经很清楚&#xff0c;活动有所减少&#xff0c;尤其是在Oracle保持领先的JSR中。 这是怎么回事&#xff1f; 最近&#xff0c;在这方面&#xff0c;Java EE社区进行了很多讨论&#xff0c;我认为给开发人员社区一…

Lombok,一种编译时Java注释预处理器,可最大程度地减少代码大小

在本文中&#xff0c;我们将看到如何在常规Java代码中使用lombok来最小化代码长度和冗余。 什么是Lombok&#xff1f; Lombok&#xff0c;一个编译时注释预处理器&#xff0c;有助于在编译时注入一些代码。 在详细介绍之前&#xff0c;我要求您应该从他们的网站上观看视频。 …

css3实现雷达图

效果图&#xff1a;gif图&#xff1a;代码&#xff1a;<!DOCTYPE html> <html > <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEEdge,chrome1"/> <meta name"viewpor…

STL set

STL set 百科名片 STL 对这个序列可以进行查找&#xff0c;插入删除序列中的任意一个元素&#xff0c;而完成这些操作的时间同这个序列中元素个数的对数成比例关系&#xff0c;并且当游标指向一个已删除的元素时&#xff0c;删除操作无效。而一个经过更正的和更加实际的定义应该…

一、Objective-C之Runtime的概念

前一篇关于NSProxy代理涉及到的关于消息转发&#xff0c;把以前写的runtime文章从github上转移过来。一共三篇&#xff0c;似乎自己也忘记了一些runtime的细节&#xff0c;需要温故一下。 一、什么是Objc的Runtime&#xff1f; Runtime是Objc语言的磐石&#xff0c;Objc语言得以…

jsf服务_使用JSF的面向服务的UI

jsf服务在大型软件开发项目中&#xff0c;面向服务的体系结构非常常见&#xff0c;因为它提供了可供不同团队或部门使用的功能接口。 创建用户界面时&#xff0c;应应用相同的原理。 对于具有开票部门和客户管理部门等的大型公司&#xff0c;组织结构图可能如下所示&#xff1a…

ANTLR和Jetbrains MPS:解析文件并以树符号显示AST

Itemis再次这样做&#xff1a;他们刚刚为Jetbrains MPS发布了一个非常酷的新插件。 这允许定义新的树编辑器。 他们看起来像这样&#xff1a; 在这篇文章中&#xff0c;我们将看到&#xff1a; 如何在MPS中使用ANTLR解析器 如何使用树符号表示已解析的AST 特别是&#xf…

KMP字符串模式匹配详解

刚看到位兄弟也贴了份KMP算法说明&#xff0c;但本人觉得说的不是很详细&#xff0c;当初我在看这个算法的时候也看的头晕昏昏的&#xff0c;我贴的这份也是网上找的。且听详细分解&#xff1a;KMP字符串模式匹配详解 来自CSDN A_B_C_ABC 网友 KMP字符串模式匹配通俗点说…

ASP.NET Core IdentityServer4 新手上路

OAuth2.0资料 今天看到一篇博主写了该系列文章,贴图和过程都比较详细,俗话说实践是检验真理的唯一标准&#xff08;如果是按照参考文章复制粘贴,应该不会出现踩坑&#xff0c;但是我喜欢自己手动敲一遍&#xff09;&#xff0c;发现几个坑&#xff0c;因而总结下经验&#xff0…

主成分分析和因子分析区别与联系

主成分分析可以简单的总结成一句话&#xff1a;数据的压缩和解释。常被用来寻找判断某种事物或现象的综合指标&#xff0c;并且给综合指标所包含的信息以适当的解释。在实际的应用过程中&#xff0c;主成分分析常被用作达到目的的中间手段&#xff0c;而非完全的一种分析方法。…

luogu P1519 穿越栅栏 Overfencing

题目描述 描述 农夫John在外面的田野上搭建了一个巨大的用栅栏围成的迷宫。幸运的是&#xff0c;他在迷宫的边界上留出了两段栅栏作为迷宫的出口。更幸运的是&#xff0c;他所建造的迷宫是一个“完美的”迷宫&#xff1a;即你能从迷宫中的任意一点找到一条走出迷宫的路。给定迷…

css实现简单的告警提示动画效果

需求&#xff1a;css实现简单的告警提示动画效果&#xff0c;当接收到实时信息的时候&#xff0c;页面弹出告警信息的动画效果<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>css实现告警提示动画</…

程序员的八个级别

2009年4月6日 陈皓 在面试时&#xff0c;你可能会被经常问到“在未来5年&#xff0c;你想干什么&#xff1f;”&#xff0c;这可能是一个比较难回答的问题。在中国&#xff0c;答案一般可能会是Team leader&#xff0c;Manager&#xff0c;或是Architect&#xff0c;Specialist…

一个具有Spring Boot,Spring Security和Stormpath的简单Web应用程序-15分钟

建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; 更新 &#xff1a;我们最近发布了对…

javafx2_JavaFX 2 GameTutorial第5部分

javafx2介绍 这是与JavaFX 2 Game Tutorial相关的六部分系列的第五部分。 我知道自从我写关于游戏的博客以来已经有很长时间了&#xff0c;但希望您仍然与我在一起。 如果您想回顾一下&#xff0c;请阅读第1部分 &#xff0c; 第2 部分 &#xff0c; 第3 部分和第4 部分 &#…

史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)

转载请标明出处&#xff1a; 原文首发于&#xff1a;https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f2-ribbon/ 本文出自方志朋的博客 在上一篇文章&#xff0c;讲了服务的注册和发现。在微服务架构中&#xff0c;业务都会被拆分成一个独立的服务&#xff0c;服务与服…