C# Web 数据注解Data Annotations、模型状态ModelState、数据验证
C#中的模型状态与数据注解,为我们提供了很便利的请求数据的验证。
1. ModelState
ModelState在进行数据验证的时候很有用的,它是:
1)验证数据,以及保存数据对应的错误信息。
2)微软的一种DRY(Don't Repeat Yourself)设计,通过ModelState可以做服务端验证,同时可以配合jquery validation生成前端数据验证
2. 数据注解Data Annotations、数据验证
如果我们想要添加数据验证,首先要创建我们的数据验证实体。
比如,我们有一个方法,是保存用户信息,而输入实体是SaveUserInfoInput
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web; namespace FeiDu.Models.UserModels
{ /// <summary>
/// 保存用户信息
/// </summary>
public class SaveUserInfoInput
{ /// <summary>
/// 名字
/// </summary>
[Required(ErrorMessage = "请输入名字")]
public string Name { get; set; } /// <summary>
/// 手机号码
/// </summary>
[Required(ErrorMessage = "请输入手机号码")]
[RegularExpression(@"^1[1|2|3|4|5|6|7|8|9][0-9]\d{8}$", ErrorMessage = "手机号格式错误")]
public string Phone { get; set; } /// <summary>
/// 省
/// </summary>
[Required(ErrorMessage = "请输入省")]
public string Province { get; set; } /// <summary>
/// 市
/// </summary>
[Required(ErrorMessage = "请输入市")]
public string City { get; set; } /// <summary>
/// 地址
/// </summary>
[Required(ErrorMessage = "请输入地址")]
public string Address { get; set; } /// <summary>
/// 手机验证码
/// </summary>
[Required]
public string PhoneCode { get; set; } }
}
从上面可以看到,我们添加了数据验证的注解,Required、RegularExpression
再看看我们的Controller中的保存用户信息的方法:
public ResponseMessageObj SaveUserInfo(SaveUserInfoInput input)
当我们传数据的时候,发现输入验证类SaveUserInfoInput 并没有用,因为我们还没加入ModelState的验证。
3. 加入全局的ModelState的验证
首先我们建一个类GlobalActionFilterAttribute,继承ActionFilterAttribute,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http.Controllers;
using System.Web.Http.Filters; namespace FeiDu.Common
{ /// <summary>
/// 验证信息
/// </summary>
public class GlobalActionFilterAttribute:ActionFilterAttribute
{ public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid == false)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
}
} }
}
然后在WebApiConfig类的Register方法中,注册全局FilterAttribute
//注册Global Filter
config.Filters.Add(new GlobalActionFilterAttribute());
然后我们再运行,发现数据注解的验证可以了。
当然,我们也可以在固定的方法上面加入数据验证,而不需要注册全局的数据验证。
4. 数据注解demo
1)非空验证 [Required]
2)长度验证 [StringLength(100, MinimumLength = 10)]
3)正则表达式验证 [RegularExpression("your expression")]
4)值范围验证 [Range(10, 100)]
5)对比验证 [Compare("Name")]
C# Web 数据注解Data Annotations、模型状态ModelState、数据验证的更多相关文章
- [MVC4]Data Annotations Extensions:无法使用EmailAddress等验证特性的解决方法
本文地址:http://www.cnblogs.com/egger/p/3404159.html 欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 数据注解(Data Annotations) Web应用 ...
- 数据注解和验证 – ASP.NET MVC 4 系列
不仅在客户端浏览器中需要执行验证逻辑,在服务器端也需要执行.客户端验证能即时给出一个错误反馈(阻止请求发送至服务器),是时下 Web 应用程序所期望的特性.服务器端验证,主要是因为来自网 ...
- ASP.NET MVC5(四):数据注解和验证
前言 用户输入验证的工作,不仅要在客户端浏览器中执行,还要在服务端执行.主要原因是客户端验证会对输入数据给出即时反馈,提高用户体验:服务器端验证,主要是因为不能完全信任用户提供的数据.ASP.NET ...
- ASP.NET MVC5----常见的数据注解和验证
只要一直走,慢点又何妨. 在使用MVC模式进行开发时,数据注解是经常使用的(模型之上操作),下面是我看书整理的一些常见的用法. 什么是验证,数据注解 验证 从全局来看,发现逻辑仅是整个验证的很小的一部 ...
- EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射
I.EF里的默认映射 上篇文章演示的通过定义实体类就可以自动生成数据库,并且EF自动设置了数据库的主键.外键以及表名和字段的类型等,这就是EF里的默认映射.具体分为: 数据库映射:Code First ...
- EF——默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射 02 (转)
EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射 I.EF里的默认映射 上篇文章演示的通过定义实体类就可以自动生成数据库,并且EF自动设置了数据库 ...
- EF的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射
I.EF的默认映射 上节我们创建项目,通过定义实体类就可以自动生成数据库,并且EF帮我们自动设置了数据库的主键.外键以及表名和字段的类型等,这就是EF的默认映射.具体分为: 数据库映射:Code Fi ...
- Entity Framework(三):使用特性(数据注解)创建表结构
一.理解Code First及其约定和配置 传统设计应用的方式都是由下而上的,即我们习惯优先考虑数据库,然后使用这个以数据为中心的方法在数据之上构建应用程序.这种方法非常适合于数据密集的应用或者数据库 ...
- MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求
MVC5中Model层开发数据注解 ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证( ...
随机推荐
- inline&friend&操作符重载
(1).inline:是一种以空间换时间的做法省去调用函数的额外开销,提高程序的运行效率,它对于编译器而言只是一种建议 (2).友元函数:是可以直接访问类的private成员的非成员函数.它是定义在类 ...
- 分形之谢尔宾斯基(Sierpinski)三角形
谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集.也有的资料将其称之为谢尔宾斯基坟垛. 其生成过程为: 取一个 ...
- Asp.Net Core探索 之 appsettings.json
appsettings.json是什么? 相信大家在.Net Framework的项目都会用的web.config,app.config这些文件,appsettings.json文件就是Asp.Net ...
- ubuntu18.10安装redis遇到问题
执行命令apt-get install redis-server 安装遇到的问题 1.出现apt-get被占用情况,用ps -a|grep apt ,杀死存在的apt进程 2.还不行就执行sudo f ...
- C# windform 使用TreeGridView
1 下载 treeGridView.DLL库文件. 2 添加到工程中. 右键“工具箱”选择“选择项” 弹出对话框 选择“浏览” 选中下载还的dll库文件.完成后工具箱中会有 treeGridView控 ...
- 【BZOJ2882】 工艺(SAM)
传送门 BZOJCH 洛谷 Solution 这个东西要求的不就是最小表示法吗? 把原串复制一遍然后都加到后缀自动机里面去. 用个map跑一下,这样子可以保证每一次选的是最小字典序的. 然后跑\(n\ ...
- Linux 安装JavaEE环境之jdk安装笔记
1.安装jdk 先用xftp将jdk的压缩包上传到 /opt/ 2.在/usr/local/下使用命令mkdir java创建java目录 将jdk-7u79-linux-x64.gz解压缩至/usr ...
- Python语法基础练习
- Docker三剑客之Docker Machine
一.什么是Docker Machine Docker Machine 是Docker官方编排项目之一,使用go语言编写的,使用不同引擎在多种平台上快速的安装Docker环境,开源地址:https:// ...
- 插入排序的Java代码实现
插入排序也是一类非常常见的排序方法,它主要包含直接插入排序,Shell排序和折半插入排序等几种常见的排序方法. 1.直接插入排序 直接插入排序的思路非常简单:依次将待排序的数据元素按其关键字值的大小插 ...