.Net Core WebApi 模型验证无效时报400
问题
模型验证无效时,没有进入到接口里,而是直接报400 Bad Request,非常不友好。
环境
SDK:.Net Core 2.2.401
开发工具:VS2017
step 1 创建接口
/// <summary>
/// 注册
/// </summary>
/// <param name="input">request Body</param>
[HttpPost]
[AllowAnonymous]
public object PostRegister([FromBody] InputUserRegister input)
{
var userService = GetService<IUserService>();
return userService.Register(input);
}
Step 2 创建模型
引用命名空间
using System.ComponentModel.DataAnnotations;
public class InputUserRegister
{
[Required(ErrorMessage = "请填写用户名")]
[StringLength(, ErrorMessage = "用户名长度过长")]
public string UserName { get; set; } [Required(ErrorMessage = "请填写密码")]
[StringLength(, ErrorMessage = "密码长度过长")]
public string Password { get; set; } [Required(ErrorMessage = "请填写确认密码")]
[Compare("Password", ErrorMessage = "两次输入的密码不一致")] public string ConfirmPassword { get; set; }
}
Step 3 测试


解决
#region 禁止默认行为
services.Configure<ApiBehaviorOptions>(options =>
{
options.InvalidModelStateResponseFactory = (context) =>
{
if (context.ModelState.IsValid)
return null;
var error = "";
foreach (var item in context.ModelState)
{
var state = item.Value;
var message = state.Errors.FirstOrDefault(p => !string.IsNullOrWhiteSpace(p.ErrorMessage))?.ErrorMessage;
if (string.IsNullOrWhiteSpace(message))
{
message = state.Errors.FirstOrDefault(o => o.Exception != null)?.Exception.Message;
}
if (string.IsNullOrWhiteSpace(message))
continue;
error = message;
break;
}
return new JsonResult(new Models.VModels.ErrorResponse(error.ToString()));
};
});
#endregion
.Net Core WebApi 模型验证无效时报400的更多相关文章
- ASP.NET Core - 实现自定义WebApi模型验证
Framework时代 在Framework时代,我们一般进行参数验证的时候,以下代码是非常常见的 [HttpPost] public async Task<JsonResult> Sav ...
- webapi - 模型验证
本次要和大家分享的是webapi的模型验证,讲解的内容可能不单单是做验证,但都是围绕模型来说明的:首先来吐槽下,今天下午老板为自己买了套新办公家具,看起来挺好说明老板有钱,不好的是我们干技术的又成了搬 ...
- aspnet core 全局模型验证,统一api响应
上手就来 新建一个模型验证过滤器,其中ApiResp是自定义的统一响应类. public class VldFilter:IActionFilter { /// <summary> /// ...
- 一、WebApi模型验证实践项目使用
一.启语 前面我们说到,模型验证的原理(包含1.项目创建,2.模型创建,3.走通测试模型验证,4.在过滤器中处理返回json格式(非控制器内))-完全是新手理解使用的,新番理解 通常情况下,对于那些经 ...
- 一、WebApi模型验证
一.新建项目 选择空的项目webapi 查看启动端口 创建控制器 添加方法 public class VerifController : ApiController { public IHttpAct ...
- asp.net core 简化模型验证 modelState.IsValid不用每一个写
第一种:直接在执行action之前验证模型 实现 IActionFilter public class ModelStateFilter : IActionFilter { public void O ...
- asp.net core自定义模型验证——前端验证
转载请注明出处:http://www.cnblogs.com/zhiyong-ITNote/ 官方网站:https://docs.microsoft.com/zh-cn/aspnet/core/mvc ...
- Asp.Net Core 全局模型验证
public class ActionFilter : IActionFilter { /// <summary> /// action 执行之前 /// </summary> ...
- ASP.NET Core 2.2 WebApi 系列【八】统一返回格式(返回值、模型验证、异常)
现阶段,基本上都是前后端分离项目,这样一来,就需要前后端配合,没有统一返回格式,那么对接起来会很麻烦,浪费时间.我们需要把所有接口及异常错误信息都返回一定的Json格式,有利于前端处理,从而提高了工作 ...
随机推荐
- CentOS 7 安装 bind 服务 实现内网DNS
目录 安装 配置 服务管理 测试 安装 废话不多说,直接安装 yum install -y bind bind-utils 配置 [root@jenkins named]# rpm -ql bind ...
- 爬取电影top250 电影名 导演 演员 风格 国家 时长 评分 录入mySQL数据库
import requestsfrom lxml import etreeimport reimport pymysqlimport time conn = pymysql.connect(host= ...
- 上传一个项目到GitHub
在github上创建hello的仓库 上传本地项目文件 echo "# hello" >> README.md git init git add README.md g ...
- input监听
<h1> 实时监测input中值的变化 </h1> <input type="text" id="username" autoco ...
- luogu P2672 推销员 |贪心
题目描述 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有N家住户,第ii家住户到入口的距离为Si米.由于同一栋 ...
- 数据库Oracle和MySQL 的不同
实例区别: MySQL是轻量型数据库,开源免费.Oracle收费,这个不是重点,,重点是它贵. MySQL一个实例可以操作多个库,而Oracle一个实例只能对应一个库. MySQL安装只有300多兆, ...
- nginx学习(一):安装nginx
学习下nginx,本篇文章主要讲解下在linux下安装nginx 下载nginx 安装包 1.去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本: 2.上传tar包到li ...
- ACM-ICPC 2018 焦作赛区网络预赛 H题 String and Times(SAM)
Now you have a string consists of uppercase letters, two integers AA and BB. We call a substring won ...
- Python文件头注释的含义,你肯定不懂
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:冰火梦幻 本文档描述了Python语言文件头里典型注释的含义. 1. ...
- 笔记||Python3之面向对象
面向对象编程:简称OOP. 是一种程序设计思想.oop把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 在python中,所有数据类型都可以视为对象,也可以自定义对象.自定义的对象数据类 ...