Использовать веб-API в одном приложении из MVC Controller - PullRequest
0 голосов
/ 15 ноября 2018

Я пишу приложение, которое обслуживает как веб-API, так и контент MVC в .NET Core.Из контроллера MVC я хочу вызвать функции API и получить данные, которые возвращаются.Есть ли лучший способ, чем использовать HttpClient или подобные вещи?Как создание экземпляра класса контроллера API в контроллере MVC?Я не могу просто пойти new ApiController();, так как это зависит от внедрения зависимости, могу я?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

«Как создать экземпляр класса контроллера API в контроллере MVC?»

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

Но если функциональность, которая на самом деле получает данные, находится в отдельном классе, вы можете вызвать соответствующий метод этого класса и получить данные напрямую - вероятно, лучше получить их как переменную, чем в любом случае JSON.

Это все о дизайне вашего приложения - процесс извлечения данных (например, из базы данных) должен быть функционально отделен от процесса предоставления его пользователю (например, в виде JSON через контроллер API). Поэтому любой код должен вызывать функцию извлечения данных, а не только API.

Концептуально вы можете думать о них как о различных слоях функциональности. Это распространенная архитектурная модель в программном обеспечении - уровень представления, (необязательно) уровень логики и уровень данных.

0 голосов
/ 15 ноября 2018

Если ваше приложение имеет части ASP.Net MVC и веб-API, лучшим решением будет поместить любую функциональность / бизнес-логику, необходимую для получения любых данных на уровне обслуживания. Тогда и MVC, и Web API могут использовать их напрямую, а не запускать HttpClient (или аналогичный).

Если честно, это хорошая практика, независимо от того, есть ли у вас и MVC, и Web API, или только один. Это позволило бы различным контроллерам API / MVC получать доступ к одним и тем же данным в приложении без дублирования кода.

Взгляните на Onion Architecture, которая обычно имеет 4 слоя.

  1. пользовательский интерфейс (MVC / Web API),
  2. Уровень обслуживания (для всей бизнес-логики),
  3. Уровень репозитория (для сохранения данных) и,
  4. Общий базовый уровень для всех ваших доменных объектов (POCO, общих для всех уровней).

На C # Corner есть хорошая статья, объясняющая Onion Architecture.

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