標籤:sel names address 狀態 creat hone 通過 sem icon
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 Filterconfig.Filters.Add(new GlobalActionFilterAttribute());
然後我們再運行,探索資料註解的驗證可以了。
當然,我們也可以在固定的方法上面加入資料驗證,而不需要註冊全域的資料驗證。
4. 資料註解demo
1)非空驗證 [Required]
2)長度驗證 [StringLength(100, MinimumLength = 10)]
3)Regex驗證 [RegularExpression("your expression")]
4)值範圍驗證 [Range(10, 100)]
5)對比驗證 [Compare("Name")]
C# Web 資料註解Data Annotations、模型狀態ModelState、資料驗證