在C# Web API中实现数据验证逻辑,通常有以下几种方法:
在模型类(Model)中的属性上添加数据注解,以定义验证规则。例如:
public class User
{
[Required(ErrorMessage = "用户名不能为空")]
[StringLength(50, ErrorMessage = "用户名长度不能超过50个字符")]
public string Username { get; set; }
[Required(ErrorMessage = "密码不能为空")]
[StringLength(50, ErrorMessage = "密码长度不能超过50个字符")]
public string Password { get; set; }
}
实现IValidatable接口,在模型类中定义一个Validate方法,用于自定义验证逻辑。例如:
public class User : IValidatable
{
[Required(ErrorMessage = "用户名不能为空")]
[StringLength(50, ErrorMessage = "用户名长度不能超过50个字符")]
public string Username { get; set; }
[Required(ErrorMessage = "密码不能为空")]
[StringLength(50, ErrorMessage = "密码长度不能超过50个字符")]
public string Password { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (string.IsNullOrEmpty(Username))
{
yield return new ValidationResult("用户名不能为空");
}
if (string.IsNullOrEmpty(Password))
{
yield return new ValidationResult("密码不能为空");
}
}
}
安装FluentValidation库(https://github.com/FluentValidation/FluentValidation),为模型类创建一个验证器。例如:
public class UserValidator : AbstractValidator<User>
{
public UserValidator()
{
RuleFor(x => x.Username).NotEmpty().MaximumLength(50);
RuleFor(x => x.Password).NotEmpty().MaximumLength(50);
}
}
在API控制器中使用FluentValidation验证器:
public class UsersController : ApiController
{
private readonly UserValidator _userValidator;
public UsersController(IValidator<User> userValidator)
{
_userValidator = userValidator;
}
[HttpPost]
public IHttpActionResult Create([FromBody] User user)
{
var validationResult = _userValidator.Validate(user);
if (!validationResult.IsValid)
{
return BadRequest(validationResult);
}
// 保存用户并返回响应
}
}
在Global.asax或Startup.cs中配置数据验证中间件,以便对所有请求进行验证。例如,在Startup.cs中添加以下代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews()
.AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<UserValidator>());
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
这样,当API接收到请求时,会自动进行数据验证,并在验证失败时返回相应的错误信息。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。