Asp.net core mvc'deki başka bir denetleyiciden GET yöntemine nasıl erişilir?
Aug 18 2020
İki denetleyicim var: OcorrenciasAPI ve IgnicoesAPI. Denetleyicim IgnicoesAPI'deki GET yöntemine OcorrenciasAPI denetleyicisinden erişmem gerekiyor. Bunu yapmak için en iyi yaklaşım nedir?
Yanıtlar
BijuKalanjoor Aug 18 2020 at 14:56
Bu, sorunuzun tam cevabı değildir, ancak bu sorununuzu çözebilir. GET yöntemi içindeki kodunuzu ortak bir sınıfa yeniden düzenleyin ve bu sınıfa her iki denetleyiciden erişin. Aşağıda örnek kod ekleniyor.
Modeli
public sealed class Person
{
public int ID { get; set; }
public string Name { get; set; }
}
Depo
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" }
};
}
}
İlk Api Denetleyicisi
[Route("api/[controller]")]
[ApiController]
public class MyFirstApiController : ControllerBase
{
private readonly PersonRepository personRepository = new PersonRepository();
[HttpGet]
public IEnumerable<Models.Person> Get()
{
return personRepository.GetPeople();
}
}
İkinci Api Denetleyicisi
[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
Paylaşılan işlevselliğe sahip yeni bir sınıf oluşturun, onu startup.cs dosyanıza bir hizmet olarak ekleyin ve ardından denetleyicilerinize enjekte edin.
public interface IMyService
{
string MyMethod();
}
public class MyService : IMyService
{
public string MyMethod()
{
throw new NotImplementedException();
}
}
Startup.cs
services.AddTransient<IMyService, MyService>();
OcorrenciasAPI yapıcısı
private readonly IMyService _myService;
public OcorrenciasAPI (IMyService myService)
{
_myService = myService
}
IgnicoesAPI yapıcısı
private readonly IMyService _myService;
public IgnicoesAPI(IMyService myService)
{
_myService = myService
}
Kullanım
var result = _myService.MyMethod();
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'