Quando abbiamo a che fare con applicazioni complesse basate su ASP.NET Core Web API, il rischio principale è che il progetto contenente la vera e propria applicazione web cresca a dismisura, diventando alla lunga monolitico e poco manutenibile.
Fortunatamente, con pochissimo sforzo possiamo rendere i nostri progetti modulari, creando gli API controller all'interno di class library e poi referenziandoli dall'applicazione principale. Cerchiamo di capire come fare.
Il primo passo è ovviamente quello di creare un progetto di tipo Class Library, a cui dovremo poi aggiungere una reference al framework ASP.NET Core:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> </PropertyGroup> <ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup> </Project>
Come sappiamo, la FrameworkReference inietterà automaticamente tutti gli assembly necessari per ASP.NET Core, uniformandone la versione a quella del framework selezionato, che nel nostro caso è .NET 5.
Immaginiamo ora di aver creato alcuni controller all'interno di questa libreria:
namespace ControllerLibrary { [ApiController] [Route("[controller]")] public class ExternalController : ControllerBase { [HttpGet] public IActionResult Get() { return Ok("From external controller"); } } }
Affinché essi siano visibili dall'applicazione principale, oltre che referenziare il progetto, dovremo aggiungerli come ApplicationPart nella classe Startup:
public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddApplicationPart(typeof(ExternalController).Assembly); ... }
Il metodo AddApplicationPart necessita della reference all'assembly contenente i controller esterni, a cui possiamo arrivare tramite uno qualsiasi dei tipi definiti nella libreria stessa.
Una volta effettuati questi passaggi, il nostro ExternalController sarà finalmente visibile e invocabile dall'applicazione principale:
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Effettuare il binding di date in Blazor
Gestire la cancellazione di una richiesta in streaming da Blazor
Evitare il flickering dei componenti nel prerender di Blazor 8
Applicare un filtro per recuperare alcune issue di GitHub
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Disabilitare automaticamente un workflow di GitHub (parte 2)
Sostituire la GitHub Action di login su private registry
Gestione dell'annidamento delle regole dei layer in CSS
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Implementare l'infinite scroll con QuickGrid in Blazor Server
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- .NET Conference Italia 2023 - Milano e Online