有这样一些场景,我们需要模型验证,某些字段不允许重复,但是又不希望在数据访问层增加一堆额外逻辑判断。
我们需要数据访问层简洁,这种模型验证在进去Action之前,验证不通过直接告诉前端。

一个特性,继承ValidationAttribute,实现
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
重载

代码段附上

public class RemoteValidateAttribute: ValidationAttribute
{
public string Controller { get; set; }
public string Action { get; set; }
public string HttpMethod { get; set; } = "GET"; protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var url = $"{HostInformat.Instance.Host}/{Controller}/{Action}";
var client = new RestClient(url);
var request = new RestRequest(HttpMethod.Equals("POST", StringComparison.InvariantCultureIgnoreCase) ? Method.POST : Method.GET); request.AddParameter(validationContext.MemberName, value); var response = client.Execute<ValidateInformat>(request); if (response.IsSuccessful)
{
var result = response.Data; if (result.Status)
{
return ValidationResult.Success;
} return new ValidationResult(result.Message);
} return new ValidationResult($"Action:{url}无法访问");
}
}
    public class ValidateInformat
{
public bool Status { get; set; }
public string Message { get; set; } public static implicit operator ValidateInformat(string message)
{
return new ValidateInformat()
{
Status = false,
Message = message
};
} public static implicit operator ValidateInformat(bool status)
{
return new ValidateInformat()
{
Status = status,
Message = null
};
}
}
    public class HostInformat
{
public HostInformat(IConfiguration conf)
{
Host = conf["urls"]; if (Instance == null)
{
Instance = this;
}
} public string Host { get; } public static HostInformat Instance { get; set; }
}

调用

[RemoteValidate(Action = "FindPlatformUserForAccount", Controller = "Validata", HttpMethod = "Post")]
public string Account { get; set; }

验证的Action

    public class ValidataController : Controller
{
[HttpPost]
public ValidateInformat FindPlatformUserForAccount(string Account)
{
var result = PlatformUserHelper.ExistsForAccount(Account); if (result)
{
return "账号名已存在";
} return true;
}
}

网络请求部分是用的RestSharp

在Startup.cs
ConfigureServices方法内增加如下代码

            services.AddSingleton<IConfiguration>(Configuration);
services.AddSingleton<HostInformat>();

Configure方法内增加如下代码

            var hostInformat = app.ApplicationServices.GetRequiredService<HostInformat>();
HostInformat.Instance = hostInformat;

asp.net 远程模型验证的更多相关文章

  1. ASP.NET MVC - 模型验证

    ASP.NET MVC - 模型验证(Model verification) 模型验证原理浅析 模型验证用到了模型绑定器.模型验证器(System.Web.Mvc.DataAnnotationsMod ...

  2. asp.net mvc 模型验证组件——FluentValidation

    asp.net mvc 模型验证组件——FluentValidation 示例 using FluentValidation; public class CustomerValidator: Abst ...

  3. ASP.NET Core 模型验证的一个小小坑

    今天在我们的一个项目中遇到一个 asp.net core 模型验证(model validation)的小问题.当模型属性的类型是 bool ,而提交上来的该属性值是 null ,asp.net co ...

  4. ASP.NET没有魔法——ASP.NET MVC 模型验证

    在前面的文章中介绍了用户的注册及登录功能,在注册用户时可以通过代码的形式限制用户名及密码的格式,如果不符合要求那么就无法完成操作,如下图: 该功能的原理是Identity基于的Entity Frame ...

  5. asp.net mvc 模型验证注解,表单提交

    一.添加模型 public class Account { public int ID { get; set; } [Display(Name = "姓名")] //设置要显示的字 ...

  6. asp.net mvc 模型验证-最舒服的验证方式

    在院子里发现 http://www.cnblogs.com/yangecnu/p/3759784.html 模型验证方法 1. 一般方法 繁琐, 无数的if else, 在炎炎夏天,我见过一个验证方法 ...

  7. 当ASP.NET MVC模型验证遇上CKEditor

    项目需要,使用到了CKEditor编辑器.这是个很不错的富文本编辑器,但是当它绑定的字段需要进行模型验证的时候,却会出现验证失效的问题.因此本文旨在记录这个问题和给出解决办法.以下以Validatio ...

  8. Asp.Net MVC 模型验证详解-实现客户端、服务端双重验证

    概要 在asp.net webform开发中经常会对用户提交输入的信息进行校验,一般为了安全起见大家都会在客户端进行Javascript(利于交互).服务端双重校验(安全).书写校验代码是一个繁琐的过 ...

  9. ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(下篇)

    上一篇<ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)>文章介绍了ASP.NET MVC模型绑定的相关组件和概念,本章将介绍Controller在执行时是如何通过这 ...

随机推荐

  1. WPF之Converter

    1.Converter介绍 在WPF应用程序中经常遇到类似这样的问题,在定义的类中用的bool类型的值,但是界面上某个控件的显示属性是Visibility的枚举类型的,解决这个问题可以简单在定义的类中 ...

  2. shell专题(一):Shell概述

    大数据程序员为什么要学习Shell呢? 1)需要看懂运维人员编写的Shell程序. 2)偶尔会编写一些简单Shell程序来管理集群.提高开发效

  3. java 数据结构(一):java常用类 一 String类

    java.lang.String类的使用1.概述String:字符串,使用一对""引起来表示.1.String声明为final的,不可被继承2.String实现了Serializa ...

  4. 05 drf源码剖析之认证

    05 drf源码剖析之认证 目录 05 drf源码剖析之认证 1. 认证简述 2. 认证的使用 3. 源码剖析 4. 总结 1. 认证简述 当我们通过Web浏览器与API进行交互时,我们可以登录,然后 ...

  5. 04 drf源码剖析之版本

    04 drf源码剖析之版本 目录 04 drf源码剖析之版本 1. 版本简述 2. 版本使用 3.源码剖析 4. 总结 1. 版本简述 API版本控制使您可以更改不同客户端之间的行为.REST框架提供 ...

  6. sql多表语句

    多条件查询条件判空 最优写法 3三表带条件查询

  7. git怎么合并远程分支

    一共就五步: 1.把代码clone到本地仓库 git clone https://github.com/573734817pc/shop.git 2.在本地创建dev分支并与远程dev分支对应 git ...

  8. 【RPA Starter第三课】第一个Uipath项目:HelloWord

    最后是一个小项目,开启使用Uipath.Uipath云平台,Uipath Orchestrator,Uipath Studio,发布项目.怎么启动机器人.都有详细的步骤. Uipath 的账号是通用的 ...

  9. Burp Suite Extender Module - 扩展模块

    模块功能: 在扩展模块可以通过使用自定义代码,进行Burp 的自定义操作. 1. Burp Extensions页面 2. BApp Store中可以购买和安装别人写好的扩展功能 3. 在APIs界面 ...

  10. 通过代理模块拦截网页应用程序流量 - Intercept Web Application Traffic Using Proxy Modules

    测试网站: http://testphp.vulnweb.com/login.php 浏览器代理设置为:127.0.0.1:8080 查看拦截流量: 方式1:通Proxy - Intercept 方式 ...