Comment accéder à la méthode GET à partir d'un autre contrôleur dans asp.net core mvc?
J'ai deux contrôleurs: OcorrenciasAPI et IgnicoesAPI. J'ai besoin d'accéder à la méthode GET dans mon contrôleur IgnicoesAPI via le contrôleur OcorrenciasAPI. Quelle est la meilleure approche pour y parvenir?
Réponses
Ce n'est pas une réponse exacte à votre question, mais cela peut résoudre votre problème. Réfractivez votre code à l'intérieur de la méthode GET dans une classe commune et accédez à cette classe à partir des deux contrôleurs. Ajout d'un exemple de code ci-dessous.
Modèle
public sealed class Person
{
public int ID { get; set; }
public string Name { get; set; }
}
Dépôt
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" }
};
}
}
Premier contrôleur d'API
[Route("api/[controller]")]
[ApiController]
public class MyFirstApiController : ControllerBase
{
private readonly PersonRepository personRepository = new PersonRepository();
[HttpGet]
public IEnumerable<Models.Person> Get()
{
return personRepository.GetPeople();
}
}
Deuxième contrôleur d'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);
}
}
Créez une nouvelle classe avec la fonctionnalité partagée, ajoutez-la en tant que service dans votre startup.cs, puis injectez-la dans vos contrôleurs.
public interface IMyService
{
string MyMethod();
}
public class MyService : IMyService
{
public string MyMethod()
{
throw new NotImplementedException();
}
}
Startup.cs
services.AddTransient<IMyService, MyService>();
Constructeur OcorrenciasAPI
private readonly IMyService _myService;
public OcorrenciasAPI (IMyService myService)
{
_myService = myService
}
Constructeur IgnicoesAPI
private readonly IMyService _myService;
public IgnicoesAPI(IMyService myService)
{
_myService = myService
}
Utilisation
var result = _myService.MyMethod();