创建自定义模型验证属性

时间:2018-06-01 15:48:12

标签: c# asp.net-core attributes

我正在尝试模拟[ApiController]属性的模型验证行为,但是我想在JSON中的Error数组中返回我使用验证错误制作的JSON对象。

我面临的挑战是我不确定如何从属性中访问验证错误,我想在类级别使用该属性,因此它将在所有控制器方法上运行而无需提供每个动作的属性。

任何方向都会非常感激。

编辑:链接副本是如何创建自定义属性的。我正在寻找如何从属性中访问模型验证错误。

1 个答案:

答案 0 :(得分:0)

我能够找出问题所在。我能够在ModelState.IsValid方法中使用OnActionExecuting来访问错误。遗憾的是,我对制作类级别属性并不熟悉,因此我必须将其应用于所有post / patch方法才能使其正常工作。如果其他人想出办法轻松做到这一点,请告诉我!

Project.Structure用于为那些好奇的人格式化JSON。

using System;
using System.Collections.Generic;
using System.Linq;
using Project.Structure;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

namespace Project.Attributes
{
   public class ValidateModelAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            if (!context.ModelState.IsValid)
            {
                var errorList = new List<string>();
                foreach (var modelError in context.ModelState.Values)
                {
                    errorList.AddRange(modelError.Errors.Select(error => error.ErrorMessage));
                }

                var response = new ResponseDto<object>
                {
                    Success = false,
                    TransactionId = Guid.NewGuid().ToString(),
                    ResponseType = ResponseType.Operation.Description(),
                    Response = null,
                    Errors = errorList,
                    Warnings = null
                };

                context.Result = new BadRequestObjectResult(response);
            }
        }
    }
}