Как использовать общедоступные методы из других ASP.NET Основной контроллер в решении?

#asp.net-core-webapi

Вопрос:

Я программирую веб-API, используя ASP.NET Ядро в связи с веб-приложением. Я ищу способ вызвать метод (например methodCallableFromOtherControllers ) с другого контроллера, не вызывая его от клиента (vus.js). Заранее спасибо за поддержку!

 [Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
    [HttpPost]
    [Route("get_test")]
    public string get_test([FromBody] Test test) 
    {

    }

    public string methodCallableFromOtherControllers() 
    {

    }
}
 

Комментарии:

1. Можно ли создать интерфейс и написать реализацию, которая содержит ту же функцию целевого контроллера?

2. не могли бы вы показать это на примере кода?

3. Как там дела, сэр? Если вы чувствуете, что мой пост полезен для вас, не могли бы вы, пожалуйста, принять его в качестве ответа? И, пожалуйста, укажите на это, если я где-то неправильно понял, заранее спасибо за ваш ответ.

Ответ №1:

Пожалуйста, позвольте мне добавить свои идеи здесь, чтобы четко описать это.

Давайте предположим, что здесь есть 2 контроллера: HomeController и HelloController

А это мой адский контролер:

 namespace WebApi_net5.Controllers
{
    public class HelloController : ControllerBase
    {
        [HttpGet("getHello")]
        public string Index()
        {
            return "hello";
        }
    }
}
 

Если я хочу вызвать этот Index() метод из HomeController, я предоставляю эти 2 способа:

 public class HomeController : ControllerBase
    {
        [HttpGet("test")]
        public string test() {
            var controller = new HelloController();
            string temp = controller.Index();
            return "a"  temp;
        }
    }
 

Или использовать AddControllersAsServices() в startup.cs

 public class HomeController : ControllerBase
    {
        private HelloController _controller;
        public HomeController(HelloController controller) {
            _controller = controller;
        }

        [HttpGet("test")]
        public string test() {
            string temp = _controller.Index();
            return "a"  temp;
        }
    }
 

службы настройки startup.cs:

 public void ConfigureServices(IServiceCollection services)
        {
            //services.AddControllers();
            services.AddControllers().AddControllersAsServices();
        }