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();
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'