我正在尝试模拟[ApiController]
属性的模型验证行为,但是我想在JSON中的Error数组中返回我使用验证错误制作的JSON对象。
我面临的挑战是我不确定如何从属性中访问验证错误,我想在类级别使用该属性,因此它将在所有控制器方法上运行而无需提供每个动作的属性。
任何方向都会非常感激。
编辑:链接副本是如何创建自定义属性的。我正在寻找如何从属性中访问模型验证错误。
答案 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);
}
}
}
}