具体示例
1.创建一个要验证的类型
来自:https://www.jianshu.com/p/cc5adac91e34
public class Movie
{
public int ID { get; set; }
[StringLength(60, MinimumLength = 3)]
[Required]
public string Title { get; set; }
[Display(Name = "放映日期")]
[DataType(DataType.Date)]
[Range(typeof(DateTime), "1/1/1966", "1/1/2020")]
public DateTime ReleaseDate { get; set; }
[Range(1, 100)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
[Required]
[StringLength(30)]
public string Genre { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
[StringLength(5)]
[Required]
public string Rating { get; set; }
}
2.添加ActionFilter在请求时验证
获取到一个错误就返回,要返回全部可以拼接错误信息返回
public class APIActionFilter : IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
}
public void OnActionExecuting(ActionExecutingContext context)
{
var modelState = context.ModelState;
if (!modelState.IsValid)
{
string error = string.Empty;
foreach (var key in modelState.Keys)
{
var state = modelState[key];
if (state.Errors.Any())
{
error = state.Errors.First().ErrorMessage;
break;
}
}
PublicResponse result = new PublicResponse()
{
isErro = 1,
errCode = "1000",
errmsg = error
};
context.Result = new JsonResult(result);
}
}
}
3.Startup.cs中添加对Filter的注册
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(option =>
{
option.Filters.Add<APIActionFilter>();
});
}
4.划重点------去掉自动验证,不然不会走自己写的这个验证
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(option =>
{
option.Filters.Add<APIActionFilter>();
});
//关闭自动验证 走过滤器进行验证
services.Configure<ApiBehaviorOptions>(options =>
options.SuppressModelStateInvalidFilter = true);
}
这样就完事了