继续上一篇

上一篇,从core方式实现了一个Rabbitmq发送队列消息的接口,我们现在需要在模型验证里面加入验证失败就发送消息的部分

    [AttributeUsage(AttributeTargets.Class)]
public class ValidateBaseAttribute:ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
return ValidationResult.Success;
}
}

这个验证特性打上之后,只要模型验证就触发

转到 ValidationContext 里面

在ValidateBaseAttribute内修改如下

   [AttributeUsage(AttributeTargets.Class)]
public class ValidateBaseAttribute:ValidationAttribute
{
public Type Type { get; set; }
public string FunName { get; set; } public ValidateBaseAttribute()
{ } public ValidateBaseAttribute(Type type, string funName)
{
Type = type;
FunName = funName;
} private bool ExecuteMethod(Type type, string funName,object value)
{
if (type == null || string.IsNullOrWhiteSpace(funName))
return false;
try
{
var instance = Activator.CreateInstance(type);
var method = type.GetMethod(funName);
return (bool)method.Invoke(instance, new[] { value });
}
catch
{
return false;
}
} protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var validate = ExecuteMethod(Type, FunName, value);
if (validate)
{
var remoteSend = validationContext.GetService(typeof(IRemoteSend)) as IRemoteSend;
if (remoteSend != null)
{
remoteSend.Send(value);
return new ValidationResult("验证失败");
}
}
return ValidationResult.Success;
}
}

在默认的ValuesController内增加方法

        [HttpGet("Check")]
public User Check([FromQuery]User user)
{
return user;
}

我们修改以下User类

//增加一个验证特性
[ValidateBase(typeof(ValidateClass), "IsValidateUser")]
    public class ValidateClass
{
public bool IsValidateUser(User user)
{
return user.Name.Equals("admin", StringComparison.InvariantCultureIgnoreCase) || user.Account.Equals("admin", StringComparison.InvariantCultureIgnoreCase);
}
}

只要用户名或者账号为admin

你以为这样就完了?No,模型验证要触发,必须有一个模型验证触发的过滤器

    public class ModelFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
string errorMessage = string.Empty;
var ErrorsModel = context.ModelState.Values.Where(item => { return item.Errors.Count > ; }).ToList().FirstOrDefault();
if (ErrorsModel != null)
{
errorMessage = ErrorsModel.Errors[].ErrorMessage;
} context.Result = new JsonResult(new { status = -, msg = errorMessage });
return;
}
}
}

在ConfigureServices内的

//services.AddMvc();
services.AddMvc(options => options.Filters.Add<ModelFilter>());

运行起来测试一下

当asp.net core偶遇docker一(模型验证和Rabbitmq 三)的更多相关文章

  1. 当asp.net core偶遇docker一(模型验证和Rabbitmq 二)

    上一篇我们说到构建了一个Rabbitmq容器 现在我们说说如何在一个悄悄传输消息到队列 我们现在设计一个Rabbitmq发送消息部分的模块 先设计一个远程发送的接口 public interface ...

  2. 当asp.net core偶遇docker一(模型验证和Rabbitmq 一)

    比如我们有一些设计,依赖于某些软件,比如rabbitmq 当管理员功能,反复错误三五次之后,就发送一条消息到队列里去,我们又不希望对原先设计带来侵入式的改变业务 这个时候,我们就可以在模型验证里面加入 ...

  3. ASP.NET Core - 实现自定义WebApi模型验证

    Framework时代 在Framework时代,我们一般进行参数验证的时候,以下代码是非常常见的 [HttpPost] public async Task<JsonResult> Sav ...

  4. ASP.NET Core 6.0 基于模型验证的数据验证

    1 前言 在程序中,需要进行数据验证的场景经常存在,且数据验证是有必要的.前端进行数据验证,主要是为了减少服务器请求压力,和提高用户体验:后端进行数据验证,主要是为了保证数据的正确性,保证系统的健壮性 ...

  5. 当asp.net core偶遇docker二(打造个人docker镜像)

    网络上的docker容器总有一些不尽人意的感觉,这个时候,就需要自己diy一个自用的. 比如我们想在163的mysql 5.7内diy一下,结果发现,这个不带vim,我想改造一个自用的mysql镜像, ...

  6. ASP.NET Core开发-Docker部署运行

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  7. 基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    欢迎阅读daxnet的新博客:一个基于Microsoft Azure.ASP.NET Core和Docker的博客系统   2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客 ...

  8. .NET Core微服务之ASP.NET Core on Docker

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Docker极简介绍 1.1 总体介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.D ...

  9. [翻译] ASP.NET Core 利用 Docker、ElasticSearch、Kibana 来记录日志

    原文: Logging with ElasticSearch, Kibana, ASP.NET Core and Docker 一步一步指导您使用 ElasticSearch, Kibana, ASP ...

随机推荐

  1. day05 程序与用户交互和基本运算符

    程序与用户交互和基本运算符 目录 程序与用户交互和基本运算符 1.程序与用户交互 1.1什么是与用户交互 1.2为什么要与用户交互 1.3如何与用户交互 1.3.1格式化输出 2基本运算符 2.1算数 ...

  2. java IO流 (二) IO流概述

    1.流的分类* 1.操作数据单位:字节流.字符流* 2.数据的流向:输入流.输出流* 3.流的角色:节点流.处理流 图示: 2.流的体系结构 说明:红框对应的是IO流中的4个抽象基类.蓝框的流需要大家 ...

  3. web 部署专题(一):Gunicorn运行与配置方法

    Gunicorn“绿色独角兽”是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork worker模式,具有使 ...

  4. Linux08 /Docker

    Linux08 /Docker 目录 Linux08 /Docker 1. docker简介/安装 2. Docker镜像加速器的设置 3. 核心三要素 镜像仓库/Registry 镜像/Image: ...

  5. CSS之Bootstrap(快速布局)

    简介 什么是Bootstrap? Bootstrap官网 框架:库 lib library jQuery作为一个框架来讲,提供一套比较便捷的操作DOM的方式 把大家都需要的功能预先写好到一些文件 这就 ...

  6. Python Ethical Hacking - Packet Sniffer(2)

     Capturing passwords from any computer connected to the same network.  ARP_SPOOF + PACKET_SNIFFER Ta ...

  7. 浅谈服务治理、微服务与Service Mesh(三) Service Mesh与Serverless

    作为本系列文章的第三篇(前两篇<浅谈服务治理.微服务与Service Mesh(一)Dubbo的前世今生>,<浅谈服务治理.微服务与Service Mesh(二) Spring Cl ...

  8. p71_文件传送协议FTP

    一.FTP服务器和用户端 FTP是基于客户/服务器(C/S) 的协议. 用户通过一一个客户机程序连接至在远程计算机上运行的服务器程序. 依照FTP协议提供服务,进行文件传送的计算机就是FTP服务器. ...

  9. java 获取传入值的区间

    /** * 获取值的区间 * * @param num 值 */ public static Map<String, Integer> getNumSection(Integer num) ...

  10. JAVA基础系列:JDK目录结构

    0. 名词解释 SDK: Softeare Development Kit,用于开发JavaEE,包括JDK. JDK: Java Development Kit,java开发工具包,包括Java编译 ...