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")]

时间: 2024-08-06 07:22:54

C# Web 数据注解Data Annotations、模型状态ModelState、数据验证的相关文章

ASP.NET MVC5(四):数据注解和验证

前言 用户输入验证的工作,不仅要在客户端浏览器中执行,还要在服务端执行.主要原因是客户端验证会对输入数据给出即时反馈,提高用户体验:服务器端验证,主要是因为不能完全信任用户提供的数据.ASP.NET MVC框架提供了强大的验证组件帮助我们处理这些繁杂的问题. 数据验证 验证注解的使用 验证注解特性定义在命名空间System.ComponentModel.DataAnnotations中,它们提供了服务器端验证的功能,当在模型的属性上使用时,框架也支持客户端验证.常用特性简介: Required当

数据注解和验证 &ndash; ASP.NET MVC 4 系列

       不仅在客户端浏览器中需要执行验证逻辑,在服务器端也需要执行.客户端验证能即时给出一个错误反馈(阻止请求发送至服务器),是时下 Web 应用程序所期望的特性.服务器端验证,主要是因为来自网络的信息都是不可信任的.        当在 ASP.NET MVC 设计模式上下文中谈论验证时,主要关注的是验证模型的值.ASP.NET MVC 验证特性可以帮助我们验证模型值,且这样验证特性是可扩展的,所以我们可以采用任意想要的方式构建验证模式,默认方法是一种声明式验证,即数据注解特性.    

MVC 5 数据注解

ASP.NET MVC5中的数据注解(转载) ASP.NET MVC5中数据注解原理: 1.asp.net MVC 的验证特性是由模型绑定器.模型元数据.模型验证器.模型状态组成的协调系统的一部分. 2.注解原理和步骤:  验证与模型绑定:   (1).ASP.NET  MVC 默认情况下,在模型绑定时执行验证逻辑.如果控制器中的操作方法带有参数时,就会隐式地执行模型绑定.或者是利用控制器的UpdateModel或者            TryUpdateModel方法显式执行模型绑定.  

Entity Framework(三):使用特性(数据注解)创建表结构

一.理解Code First及其约定和配置 传统设计应用的方式都是由下而上的,即我们习惯优先考虑数据库,然后使用这个以数据为中心的方法在数据之上构建应用程序.这种方法非常适合于数据密集的应用或者数据库很可能包含多个应用使用的业务逻辑的应用.对于这种应用,如果要使用EF的话,我们必须使用Database First方式. 设计应用的另一种方法就是以领域为中心的方式(领域驱动设计DDD).DDD是一种由上而下的方式,我们通过从实现应用所需要的领域模型和实体的角度思考,从而开始设计应用.数据库很少用来

ASP.NET MVC5----常见的数据注解和验证

只要一直走,慢点又何妨. 在使用MVC模式进行开发时,数据注解是经常使用的(模型之上操作),下面是我看书整理的一些常见的用法. 什么是验证,数据注解 验证 从全局来看,发现逻辑仅是整个验证的很小的一部分.验证首先需要管理用户友好(本地化)的与验证逻辑相关的错误提示消息:当验证失败时,在把这些错误提示消息呈现给用户界面上,当然还要向用户提供从验证失败中恢复的机制. 数据注解 注解是一种通用机制,可以用来向框架注入元数据,同时,框架不只驱动元数据的验证,还可以在生成显示和编辑模型的HTML标记时使用

asp.net mvc3 数据验证(三)—自定义数据注解

原文:asp.net mvc3 数据验证(三)-自定义数据注解         前两节讲的都是asp.net mvc3预先设定的数据注解,但是系统自由的数据注解肯定不适合所有的场合,所以有时候我们需要自定义数据注解. 自定义数据注解有两种,一种是直接写在模型对象中,这样做的好处是验证时只需要关心一种模型对象的验证逻辑,缺点也是显而易见的,那就是不能重用. 还有一种是封装在自定义的数据注解中,优点是可重用,缺点是需要应对不同类型的模型. 现在我们以封装在自定义数据注解中的方法为例看下如何在asp.

MVC5中Model层开发数据注解

ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数据显示(在View层显示相应的数据) 数据注解相关的命名空间如下: System.ComponentModel.DataAnnotations System.ComponentModel.DataAnnotations.Schema System.Web.Mvc System.Web.Securit

用客户端模型访问SharePoint数据制作网站新闻列表

用客户端模型访问SharePoint数据 在用客户端模型访问SharePoint数据首先要添加两个引用,一个是Microsoft.SharePoint.Client,另一个是Microsoft.SharePoint.Client.Runtime 在程序要引用Microsoft.SharePoint.Client命名空间 1.下面是一个简单的例子访问SharePoint列表的数据,读取的是列表名称为新闻列表,其中 ClientContext ct = new ClientContext("http

枚举帮助方法,枚举数据注解自定义验证器

枚举辅助类 获取枚举项列表 获取枚举值列表 枚举项包含 枚举值包含 转换枚举 代码如下 1 /// <summary> 2 /// 枚举辅助类 3 /// </summary> 4 public class EnumHelper 5 { 6 7 private static readonly Dictionary<Type, object> EnumCache = new Dictionary<Type, object>(); 8 9 private sta