Создание пользовательского атрибута проверки модели - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь эмулировать поведение атрибута [ApiController] для проверки модели, однако я хотел бы вернуть созданный мной объект JSON с ошибками проверки в массиве Error в JSON.

Проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, как получить доступ к ошибкам проверки из Атрибута, и я хотел бы использовать атрибут на уровне класса, поэтому он будет работать на всех методах контроллера безнеобходимость предоставления атрибута для каждого действия.

Любое направление будет высоко оценено.

edit: связанный дубликат - это способ создания пользовательского атрибута.Я смотрю, как получить доступ к ошибкам проверки модели из атрибута.

1 Ответ

0 голосов
/ 01 июня 2018

Мне удалось выяснить мою проблему.Мне удалось использовать 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);
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...