如何从ASP.NET Core MVC中的另一个控制器访问GET方法?

问题描述

我有两个控制器:OcorrenciasAPI和IgnicoesAPI。我需要通过控制器IgnicoesAPI通过OcorrenciasAPI控制器访问GET方法。最好的方法是什么?

解决方法

这不是您问题的确切答案,但这可能会解决您的问题。将GET方法中的代码折射到一个通用类中,并从两个控制器访问该类。在下面添加示例代码。

型号

public sealed class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
}

存储库

public class PersonRepository
{
    public IEnumerable<Person> GetPeople()
    {
        return new List<Person>()
        {
            new Person{ID = 1,Name = "Name 1" },new Person{ID = 2,Name = "Name 2" }
        };
    }
}

第一个Api控制器

[Route("api/[controller]")]
[ApiController]
public class MyFirstApiController : ControllerBase
{
    private readonly PersonRepository personRepository = new PersonRepository();

    [HttpGet]
    public IEnumerable<Models.Person> Get()
    {
        return personRepository.GetPeople();
    }
}

第二个Api控制器

[Route("api/[controller]")]
[ApiController]
public class MySecoundApiController : ControllerBase
{
    private readonly PersonRepository personRepository = new PersonRepository();
    [HttpGet]
    public IEnumerable<string> Get()
    {
        // Calling same repository here.
        var people = personRepository.GetPeople();

        return people.Select(p=> p.Name);
    }
}
,

使用共享功能创建一个新类,将其作为服务添加到startup.cs中,然后将其注入到控制器中。

public interface IMyService
{
    string MyMethod();
}

public class MyService : IMyService
{
    public string MyMethod()
    {
        throw new NotImplementedException();
    }
}

Startup.cs

services.AddTransient<IMyService,MyService>();

OcorrenciasAPI构造函数

  private readonly IMyService _myService;

    public OcorrenciasAPI (IMyService  myService)
    {
       _myService = myService
    }

IgnicoesAPI构造函数

  private readonly IMyService _myService;

    public IgnicoesAPI(IMyService  myService)
    {
       _myService = myService
    }

使用

var result = _myService.MyMethod();