NetCore实现全局模型绑定异常信息统一处理(场景分析)

本文主要讲解NetCore如何使用中间件捕获模型绑定的异常信息

场景

在.NET Core 中请求中,如果参数的类型错误,我们在控制器中定义的方法是不会执行的,当我们需要捕获模型绑定的异常信息时,可以使用ApiBehaviorOptions.。接下来通过一个小demo给大家讲解一下用法

实现代码

 public static void ConfigureModelBindingExceptionHandling(this IServiceCollection services)
        {
            services.Configure<ApiBehaviorOptions>(options =>
            {
                options.InvalidModelStateResponseFactory = actionContext =>
                {
                    var errors = actionContext.ModelState?
                        .Where(e => e.Value.Errors.Count > 0)
                        ?.Select(e => new  object //api返回的Model信息
                        {
                            ErrorCode = -9998,
                            ErrorMessage=e.Value.Errors.First().ErrorMessage,
                            Status=false,
                            Data=null
                        })?.FirstOrDefault();
                    return new BadRequestObjectResult(errors);
                    //此时Http状态码返回的依旧是400,如果想返回正常的http状态码200,请使用下面一行代码
                    //return new  ObjectResult(errors);
                };
            });
        }

Program.cs中注入

services.ConfigureModelBindingExceptionHandling();

演示

Controller中添加TestExp1方法

[HttpGet("TestExp1")]
        public IActionResult TestExp1(int id)
        {
            _logger.LogInformation("测试");
            return Ok();
        }

在TestExp1中声明的请求参数为int,所以我们在请求时使用字符串作为参数来请求,如下图

请求的结果信息正好是我们封装的信息,证明ApiBehaviorOptions能够正常的捕获到请求中参数类型错误的错误,

到此这篇关于NetCore实现全局模型绑定异常信息统一处理的文章就介绍到这了,更多相关NetCore全局异常处理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • .net core异常中间件的使用

    目录 正文 正文 if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } 这样写入中间件哈,那么在env环境下就会去执行UseDeveloperExceptionPage. public static IApplicationBuilder UseDeveloperExceptionPage(this IApplicationBuilder app) { if (app == null) { throw new Argument

  • ASP.NET Core中实现全局异常拦截的完整步骤

    前言 异常是一种运行时错误,当异常没有得到适当的处理,很可能会导致你的程序意外终止,这篇就来讨论一下如何在 ASP.Net Core MVC 中实现全局异常处理,我会用一些 样例代码 和 截图 来说明这些概念. 全局异常处理 其实在 ASP.Net Core MVC 框架中已经有了全局异常处理的机制,你可以在一个中心化的地方使用 全局异常处理中间件 来进行异常拦截,如果不用这种中心化方式的话,你就只能在 Controller 或者 Action 作用域上单独处理,这会导致异常处理代码零散在项目各

  • ASP.NET Core 中间件的使用之全局异常处理机制

    目录 1.创建项目 2.创建全局异常过滤器 3.依赖注入全局异常处理机制 4.测试全局异常处理机制 前言: 我们经常听到"秒修复秒上线",觉得很厉害的样子. 其实不然,这只是一个调侃而已,出现问题的方式很多(逻辑漏洞.代码异常.操作方式不正确等). 我们今天来说代码异常问题怎么快速定位,减少不必要的时间浪费. 这就是今天的主题"添加全局异常处理机制"捕捉异常存储到数据库(mongodb.SqlServer.MySQL等). PS:输出txt的话不怎么友好,不是所有人

  • NetCore实现全局模型绑定异常信息统一处理(场景分析)

    本文主要讲解NetCore如何使用中间件捕获模型绑定的异常信息 场景 在.NET Core 中请求中,如果参数的类型错误,我们在控制器中定义的方法是不会执行的,当我们需要捕获模型绑定的异常信息时,可以使用ApiBehaviorOptions..接下来通过一个小demo给大家讲解一下用法 实现代码 public static void ConfigureModelBindingExceptionHandling(this IServiceCollection services) { service

  • 详解ASP.NET MVC 常用扩展点:过滤器、模型绑定

    一.过滤器(Filter) ASP.NET MVC中的每一个请求,都会分配给对应Controller(以下简称"控制器")下的特定Action(以下简称"方法")处理,正常情况下直接在方法里写代码就可以了,但是如果想在方法执行之前或者之后处理一些逻辑,这里就需要用到过滤器. 常用的过滤器有三个:Authorize(授权过滤器),HandleError(异常过滤器),ActionFilter(自定义过滤器),对应的类分别是:AuthorizeAttribute.Han

  • .net中捕捉全局未处理异常的三种方式示例

    前言: 我们在实际项目开发中,经常会遇到一些不可预见的异常产生,有的异常在程序运行时就对其进行处理(try) 但是,有的程序不需要每一个地方都用try进行处理,那么针对这种情况,可以参照下面的方式,实现对异常的统一抓取处理,下面话不多说了,来一起看看详细的介绍吧. 方式一.Page_Error处理页面级未处理异常 作用域:当前的.aspx页面 描述:在需要处理的aspx页面的cs文件中,实现Page_Error方法,达到侦听当前页面未处理的异常 protected void Page_Error

  • asp.net core系列之模型绑定和验证方法

    一. 模型绑定 ASP.NET Core MVC 中的模型绑定,是将 HTTP 请求中的数据映射到 action方法参数.   这些参数可能是简单类型的参数,如字符串.整数或浮点数,也可能是复杂类型的参数.  当 MVC 收到 HTTP 请求时,它会将此请求路由定位到控制器的指定 action方法.默认路由模板为   {controller=Home}/{action=Index}/{id?} //例如:请求URL http://contoso.com/movies/edit/2 //映射到mo

  • SpringBoot @ControllerAdvice 拦截异常并统一处理

    在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@RequestMapping中.参考:@ControllerAdvice 文档 一.介绍 创建 MyControllerAdvice,并添加 @ControllerAdvice注解. package com.sam.demo.controller; import org.springframework.ui

  • Spring Boot FeignClient 如何捕获业务异常信息

    Spring Boot FeignClient 捕获业务异常信息 因项目重构采用spring cloud,feign不可避免.目前spring cloud在国内还不是很成熟,所以踩坑是免不了的.最近处理全局异常的问题,搜了个遍也没找到合适的解决方案 1.全局异常处理 import com.bossien.common.comm.entity.ResponseDto; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import o

  • SpringBoot全局Controller返回值格式统一

    目录 一.返回值格式统一 1.返回值介绍 2.基础类功能 3.基础实现 二.附录说明 一.返回值格式统一 1.返回值介绍 在使用controller对外提供服务的时候,很多时候都需要统一返回值格式,例如 { "status": true, "message": null, "code": "200", "data": { "name": "json", "d

  • Perl中捕获警告信息、异常信息并写入日志详解

    虽然建议在每个Perl脚本和模块中开启警告,可是你又不想用户看到Perl发出的警告. 一方面你想在代码前面使用use warnings作为你的安全网,另一方面,通常警告会出现在屏幕上.多数情况下,客户不知道如何处理这些警告.如果幸运的话这些警告仅仅让客户惊讶一下,当然,不幸的是他们尝试着去修复它们... (这里说的不是Perl程序员.) 第三方面,你或许想要保存这些警告供之后分析. 此外,在很多地方还有很多Perl脚本和应用程序没有使用use warnings也没有在#!行中使用-w.加上了us

  • ASP.NET MVC数组模型绑定详解

    在ASP.NET MVC中使用Razor语法可以在视图中方便地展示数组,如果要进行数组模型绑定,会遇到索引断裂问题,如下示例: <input type="text" name="[0].Name" /> <input type="text" name="[1].Name" /> <input type="text" name="[2].Name" />

  • 如何优雅的处理Spring Boot异常信息详解

    Spring Boot 异常处理 异常处理是一种识别并响应错误的一致性机制,异常机制可以把程序中的异常处理代码和正常的业务逻辑代码分离,包装程序的可读性和健壮性.在Spring Boot应用程序中,能够捕获并及时的响应客户端的错误操作是一件非常重要的事情.在本章节中,我将展示如何处理Spring Boot中的异常. 1. 相关注解说明 在进行演示之前,我们先了解一下在Spring Boot应用程序中与异常处理相关的几个注解 注解名称 说明 @ControllerAdvice 该标签用于处理全局的

随机推荐