Как реализовать класс, чтобы решить для Ok или плохой запрос - PullRequest
1 голос
/ 02 апреля 2020

Я ищу решение для улучшения моего кода.

У меня во всех моих контроллерах есть этот код:

var data = await _accountService.Create(value);
if (data.HasError)
{
    return BadRequest(data);
}
return Ok(data);

Я ищу решение, в котором я не Это нужно сделать, если проверить, существует ли HasError.

Во всех моих службах я возвращаю следующий класс:

public class ResponseEnvelope<T>
    {

        public T Result { get; set; }

        public IList<ErrorDto> Errors { get; set; }

        public IList<MessageDto> Messages { get; set; }

        public bool HasError
        {
            get
            {
                return Errors != null && Errors.Any();
            }
        }

        public bool HasMessage
        {
            get
            {
                return Messages != null && Messages.Any();
            }
        }

        public ResponseEnvelope<T> AddError(string code, string message = null, string description = null)
        {
            Errors.Add(new ErrorDto(code, message, description));
            return this;
        }
    }

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

. Net Core

Вы можете извлечь эту функцию, используя ActionFilter или Middleware .

Фильтр действий имеет OnActionExecuted - и вы можете разместить эту логику c там.

Я бы предпочел использовать Промежуточное программное обеспечение вы можете сделать это после звонка next.Invoke()

. Net Framework

Если вы используете. Net Framework, есть несколько параметров, таких как IHttpHandler , IHttpModule и ActionFilter. Вы можете прочитать о модулях и обработчиках там IHttpHandler vs IHttpModule

0 голосов
/ 02 апреля 2020

Если я вас правильно понял, и вы просто вызываете метод на сервоусилителе и возвращаете его ответ в обёртке, то добавьте метод расширения к Controller:

public IActionResult WrapResponse<T>(this Controller controller, ResponseEnvelope<T> envelope){
    return envelope.HasError ? controller.BadRequest(envelope) : controller.Ok(envelope);
}

и вызовите его как this.WrapResponse(data)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...