繁体   English   中英

创建定制模型验证属性

[英]Creating custom model validation attribute

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

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

任何方向将不胜感激。

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

我能够弄清楚我的问题。 我能够在OnActionExecuting方法中利用ModelState.IsValid来访问错误。 不幸的是,我对制作类级别的属性还不够熟悉,因此我必须将其应用于所有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);
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM