1. 程式人生 > >Validate Model State automatically in ASP.NET Core 2.0

Validate Model State automatically in ASP.NET Core 2.0

開始 lte 定義 新一代 get www. true 狀態 ins

if (!ModelState.IsValid)
{
    //TODO 模型驗證失敗需要做的事情
}

上面的代碼不管是在傳統的ASP.NET還是新一代ASP.NET Core中都是為了驗證模型的狀態是否合法,如果IsValid屬性的值為True,則驗證成功。這樣的代碼一般我們會寫在Action方法中的最開始處,如果在每個Action中都寫這樣的判斷就會增加我們的工作量和以及存在重復性,在這篇文章中將討論如何自動進行模型驗證。

要實現這個功能首先需要定義一個ActionFilter

public class ValidateModelStateAttribute : Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.ModelState.IsValid)
        {
            List<string> errorList = new List<string>();
            foreach (var modelState in context.ModelState.Values)
            {
                foreach (var error in modelState.Errors)
                {
                    errorList.Add(error.ErrorMessage);
                }
            }
            context.Result = new JsonResult(new { success = false, message = errorList });
        }
    }
}

修改啟動類

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc(options =>
    {
        options.Filters.Add(typeof(ValidateModelStateAttribute));
    });
}

自動進行模型驗證就實現了。走個實驗:

public class User
{
    [Required]
    [EmailAddress]
    public string Email { get; set; }
    [Required]
    public string Name { get; set; }
}
[HttpPost]
public IActionResult Insert(User user)
{
    return Json(user);
}

技術分享圖片

技術分享圖片

是不是有點AOP的意思呢?

原文地址:http://www.talkingdotnet.com/validate-model-state-automatically-asp-net-core-2-0/

Validate Model State automatically in ASP.NET Core 2.0