例子
public class StudentCreateViewModel { [Display(Name = "名")] [Required]
[XssCode(ErrorMessage = "请不要填写特殊字符")]//自定义验证特性 public string FirstName { get; set; } [Display(Name = "姓"), Required(ErrorMessage="不能为空"), MaxLength(10)] public string LastName { get; set; } [Display(Name = "出生日期")] public DateTime BirthDate { get; set; } [Display(Name = "性别")] public Gender Gender { get; set; } }
内置特性
以下是一些内置验证特性:
[CreditCard]
:验证属性是否具有信用卡格式。 需要JQuery 验证其他方法。[Compare]
:验证模型中的两个属性是否匹配。[EmailAddress]
:验证属性是否具有电子邮件格式。[Phone]
:验证属性是否具有电话号码格式。[Range]
:验证属性值是否在指定的范围内。[RegularExpression]
:验证属性值是否与指定的正则表达式匹配。[Required]
:验证字段是否不为 null。 有关此属性的行为的详细信息,[StringLength]
:验证字符串属性值是否不超过指定长度限制。[Url]
:验证属性是否具有 URL 格式。[Remote]
:通过在服务器上调用操作方法来验证客户端上的输入。 有关此属性的行为的详细信息
自定义验证特性
/// <summary> /// XSS验证 /// </summary> public class XssCodeAttribute : ValidationAttribute { public override bool IsValid(object value) { return value.TryToString().IsXss() == false; } }
这是其中一种自定义特性的写法 这种写法比较简单
验证后用 ModelState.IsValid 在控制器中做返回处理
或者 在过滤器中做全局验证处理
过滤器处理例子
public class XcActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { if (!context.ModelState.IsValid) { var apiRes = new ApiResult<bool>() { Code = ApiEnum.Error.GetValue<int>() };//json 返回 foreach (var item in context.ModelState.Values) { foreach (var error in item.Errors) { apiRes.Msg += error.ErrorMessage + "|"; } } context.Result = new JsonResult(apiRes ); } } public void OnActionExecuted(ActionExecutedContext context) { } }
更多模型验证用法请看 https://docs.microsoft.com/zh-cn/aspnet/core/mvc/models/validation?view=aspnetcore-3.1