Bagaimana cara mengakses metode GET dari pengontrol lain di asp.net core MVC?

Aug 18 2020

Saya memiliki dua pengontrol: OcorrenciasAPI dan IgnicoesAPI. Saya perlu mengakses metode GET di pengontrol saya IgnicoesAPI melalui pengontrol OcorrenciasAPI. Apa pendekatan terbaik untuk melakukan ini?

Jawaban

BijuKalanjoor Aug 18 2020 at 14:56

Ini bukanlah jawaban yang tepat untuk pertanyaan Anda, tetapi ini dapat menyelesaikan masalah Anda. Refraktor kode Anda di dalam metode GET ke dalam kelas umum dan akses kelas ini dari kedua pengontrol. Menambahkan kode contoh di bawah ini.

Model

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

Gudang

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" }
        };
    }
}

Pengontrol Api Pertama

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

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

Pengontrol Api Kedua

[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);
    }
}
BruceAdams Aug 18 2020 at 14:58

Buat kelas baru dengan fungsionalitas bersama, tambahkan sebagai layanan di startup.cs Anda dan kemudian masukkan ke dalam pengontrol Anda.

public interface IMyService
{
    string MyMethod();
}

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

Startup.cs

services.AddTransient<IMyService, MyService>();

Konstruktor OcorrenciasAPI

  private readonly IMyService _myService;

    public OcorrenciasAPI (IMyService  myService)
    {
       _myService = myService
    }

IgnicoesAPI

  private readonly IMyService _myService;

    public IgnicoesAPI(IMyService  myService)
    {
       _myService = myService
    }

Menggunakan

var result = _myService.MyMethod();