@Senture

ASP.NET WebAPI. Как сделать обертку для ControllerBase.BadRequest без внедрения зависимостей?

Всем привет! Задача состоит в следующем, хочу сделать обертку для BadRequest, передавая массив строк(ошибок), что бы фронт получал следующий формат:
errMessage: [
"err1",
"err2"
]


Можно сделать вот так:
return BadRequest(new { errMessage = listError });

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

public class ListMessageRequest : ControllerBase
    {
        public IActionResult BadRequest(string[] message)
        {
            return base.BadRequest(new { errMessage =  message  });
        }
    }


Но тогда придется использовать DI, и после, в каждом классе, где нужна эта обертка, в конструкторе инициализировать класс ListMessageRequest и только после этого, его использовать.

Есть второй вариант, написать статический класс, который будет возвращать объект с массивом ошибок и использовать его вот так:
return BadRequest(FormatError.GetFormat(listError));


Собственно вопрос. Как можно сделать эту обертку, которая будет возвращать BadRequest с объектом массива строк ошибок, но при этом без такой зависимости? Подскажите в какую сторону нужно капнуть и что почитать.

Всем спасибо!
  • Вопрос задан
  • 131 просмотр
Решения вопроса 3
petermzg
@petermzg
Самый лучший программист
Добавьте Exception Filter в конвейер вызова. И бросайте Custom Exception, который фильтр перехватит и вернет нужный вам результат
Ответ написан
Комментировать
yarosroman
@yarosroman Куратор тега C#
C# the best
1. Сделать метод расширение для Controller
public static class CBExt
{
    public static BadRequestObjectResult BadRequestWithMessage(this Controller ctr, string message)
    {
       return ctr.BadRequest(new { errMessage =  message  });
    }
}

и используйте в своем коде
написать свой контроллер и добавить в него свою реализацию BadRequest (и пометить его атрибутом [NonAction]) и использовать свою реализацию контроллера, поменять наследование всех контроллеров с Controller на ваш.. В принципе, что у вас и есть, только вы не так пошли по пути его использования.
Ответ написан
Комментировать
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
Но в таком случае легко опечататься и потом искать, почему фронт не отображает ошибку. Поэтому хочу сделать обертку, знаю что можно вот так:

public static class CBExt
{
    public static BadRequestObjectResult BadRequestWithMessage(this Controller ctr, string message)
    {
       return ctr.BadRequest(new { errMessage =  message  });
    }
}


Вот это точно не верное понимание и использование наследования. Вот если вы поменяете на
public class CustomControllerBase: ControllerBase
    {
        public new IActionResult BadRequest(string[] message)
        {
            return base.BadRequest(new { errMessage =  message  });
        }
    }

и будете все свои контроллеры наследовать от CustomControllerBase то будет норм
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы