asp.net core2 mvc 基础教程-- model 模型验证

例子

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

猜你喜欢

转载自www.cnblogs.com/cqqinjie/p/13201438.html