asp.net 远程模型验证
有这样一些场景,我们需要模型验证,某些字段不允许重复,但是又不希望在数据访问层增加一堆额外逻辑判断。
我们需要数据访问层简洁,这种模型验证在进去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 远程模型验证的更多相关文章
- ASP.NET MVC - 模型验证
ASP.NET MVC - 模型验证(Model verification) 模型验证原理浅析 模型验证用到了模型绑定器.模型验证器(System.Web.Mvc.DataAnnotationsMod ...
- asp.net mvc 模型验证组件——FluentValidation
asp.net mvc 模型验证组件——FluentValidation 示例 using FluentValidation; public class CustomerValidator: Abst ...
- ASP.NET Core 模型验证的一个小小坑
今天在我们的一个项目中遇到一个 asp.net core 模型验证(model validation)的小问题.当模型属性的类型是 bool ,而提交上来的该属性值是 null ,asp.net co ...
- ASP.NET没有魔法——ASP.NET MVC 模型验证
在前面的文章中介绍了用户的注册及登录功能,在注册用户时可以通过代码的形式限制用户名及密码的格式,如果不符合要求那么就无法完成操作,如下图: 该功能的原理是Identity基于的Entity Frame ...
- asp.net mvc 模型验证注解,表单提交
一.添加模型 public class Account { public int ID { get; set; } [Display(Name = "姓名")] //设置要显示的字 ...
- asp.net mvc 模型验证-最舒服的验证方式
在院子里发现 http://www.cnblogs.com/yangecnu/p/3759784.html 模型验证方法 1. 一般方法 繁琐, 无数的if else, 在炎炎夏天,我见过一个验证方法 ...
- 当ASP.NET MVC模型验证遇上CKEditor
项目需要,使用到了CKEditor编辑器.这是个很不错的富文本编辑器,但是当它绑定的字段需要进行模型验证的时候,却会出现验证失效的问题.因此本文旨在记录这个问题和给出解决办法.以下以Validatio ...
- Asp.Net MVC 模型验证详解-实现客户端、服务端双重验证
概要 在asp.net webform开发中经常会对用户提交输入的信息进行校验,一般为了安全起见大家都会在客户端进行Javascript(利于交互).服务端双重校验(安全).书写校验代码是一个繁琐的过 ...
- ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(下篇)
上一篇<ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)>文章介绍了ASP.NET MVC模型绑定的相关组件和概念,本章将介绍Controller在执行时是如何通过这 ...
随机推荐
- 自定义类支持foreach
建议使用yield语句简化迭代 using System; using System.Collections; namespace 自定义类实现foreach { class A { int[] w; ...
- 网络编程-UDP、TCP
总结
- Python数据可视化:画饼状图、折线图、圈图
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. from math import pi import matplotlib ...
- 初级软件工程师怎么走向BATJ?——献给迷茫中的测试人
软件测试,邀你同行.你好,我是爱码小哥. 又是一个深夜,打开手机备忘录,想记录一些东西,本人比较静的一个人,所以经常会去 IT行业的贴吧论坛交流一下,逛知乎,论坛,社区你就会发现大量这样的帖子,都会出 ...
- Python实现性能自动化测试竟然如此简单【颠覆你的三观】
一.思考 1.什么是性能自动化测试? 性能系统负载能力 超负荷运行下的稳定性 系统瓶颈 自动化测试使用程序代替手工 提升测试效率 性能自动化使用代码模拟大批量用户 让用户并发请求 多页面多用户并发 ...
- Ethical Hacking - GAINING ACCESS(14)
CLIENT SIDE ATTACKS Protecting against smart delivery methods Ensure you're not being MITM'ed -> ...
- 技术干货:Ceph搭建硬件建议详解
Ceph是专为在商品硬件上运行而设计的,这使得构建和维护超大规模的数据集群在经济上是可行的.当规划出你的集群硬件时,你需要平衡一些考虑因素,包括故障域和潜在的性能问题.硬件规划应该包括将Ceph守护进 ...
- UVALive - 3644 X-Plosives (并查集)
A secret service developed a new kind of explosive that attain its volatile property only when a spe ...
- java io流根据url读取图片
//获取图片大小 public void readFileSize(String url,HttpServletRequest request){ //根路径 File file = new File ...
- Python数据分析之股票数据
最近股市比较火,我7月初上车了,现在已经下了.中间虽然吃了点肉,但下车的时候都亏进去了,最后连点汤都没喝着. 这篇文章我们就用python对股票数据做个简单的分析.数据集是从1999年到2016年上海 ...