在ASP.NET Core MVC中,可以使用数据注解来进行参数化验证、条件验证或根据其父类对属性进行验证。下面是一个包含代码示例的解决方法:
首先,创建一个ViewModel类,该类用于接收传入的参数并进行验证。
using System.ComponentModel.DataAnnotations;
public class MyViewModel
{
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
[Range(18, 99, ErrorMessage = "Age must be between 18 and 99")]
public int Age { get; set; }
[RequiredIf(nameof(Age), 30, ErrorMessage = "Email is required if age is 30")]
public string Email { get; set; }
}
接下来,创建一个自定义的验证特性,用于实现条件验证。
using System;
using System.ComponentModel.DataAnnotations;
public class RequiredIfAttribute : ValidationAttribute
{
private readonly string _propertyName;
private readonly object _propertyValue;
public RequiredIfAttribute(string propertyName, object propertyValue)
{
_propertyName = propertyName;
_propertyValue = propertyValue;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var property = validationContext.ObjectType.GetProperty(_propertyName);
if (property == null)
{
throw new ArgumentException($"Property {_propertyName} not found.");
}
var propertyValue = property.GetValue(validationContext.ObjectInstance);
if (propertyValue.Equals(_propertyValue) && string.IsNullOrEmpty(value?.ToString()))
{
return new ValidationResult(ErrorMessage);
}
return ValidationResult.Success;
}
}
最后,在Controller中使用ModelState.IsValid来进行验证,并返回验证结果。
[HttpPost]
public IActionResult MyAction(MyViewModel model)
{
if (ModelState.IsValid)
{
// 验证通过,执行相应的操作
return Ok();
}
// 验证失败,返回错误信息
var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage);
return BadRequest(errors);
}
以上代码示例中,通过使用数据注解和自定义的验证特性,实现了参数化验证、条件验证和根据其父类对属性进行验证的功能。在ViewModel类中,可以通过数据注解来定义属性的验证规则。自定义的验证特性RequiredIfAttribute可以根据指定的条件决定是否进行验证。在Controller的Action方法中,使用ModelState.IsValid来判断验证是否通过,并根据需要返回相应的结果。
上一篇:ASP.NET Core MVC C# - 当页面超时时显示自定义弹出错误消息
下一篇:ASP.NET Core MVC ChallengeResult,重定向的操作方法没有接收到AuthenticationProperties参数。