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
Eliminare una project wiki di Azure DevOps
Estrarre dati randomici da una lista di oggetti in C#
Gestire i dati con Azure Cosmos DB Data Explorer
Utilizzare gRPC su App Service di Azure
Ottimizzazione dei block template in Angular 17
Collegare applicazioni server e client con .NET Aspire
Path addizionali per gli asset in ASP.NET Core MVC
Creare una libreria CSS universale: Immagini
Creare un webhook in Azure DevOps
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Configurare lo startup di applicazioni server e client con .NET Aspire
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Generare una User Delegation SAS in .NET per Azure Blob Storage
- Rendere le variabili read-only in una pipeline di Azure DevOps
- Utilizzare l'attributo accesskey in HTML
- .NET Conference Italia 2024 - Milano