ASP.NET Core 7 Web-API Projektstruktur

Nachdem wir im vorherigen Teil die Entwicklungsumgebung eingerichtet haben, werden wir in diesem Artikel die Projektstruktur eines typischen ASP.NET Core 7 Web-API-Projekts einmal genauer unter die Lupe nehmen. Dabei sehen wir uns nicht nur die Ordner an, die es in der Schablone vom letzten Teil schon gibt, sonder auch die Ordner, die wir selbst im Verlauf des Projektes erstellen werden.

  1. Projektroot Der zentrale Einstiegspunkt eines jeden jeden ASP.NET 7, und somit auch jedes Web-API-Projekts. In diesem Verzeichnis liegen alle für die Entwicklung erforderlichen Ressourcen. Es enthält grundlegende Dateien und Ordner, darunter:

Project Structure

  • Program.cs: Dies ist vermutlich die wichtigeste Datei im ganzen Projekt. Hier laufen alle Fäden zusammen, werden Konfigurationen der App festgelegt sowie das Startverhalten. Dies umfasst das Hinzufügen von Diensten für die Dependency Injection und das Einstellen der Middleware-Pipeline.
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

Vor ASP.NET Core 6 wurden diese Konfigurationsschritte in der Datei Startup.cs separat vorgenommen. Ab Version 6 und mit der Einführung von Funktionen auf der Root-Ebene in C# wurde die Konfiguration erheblich vereinfacht und damit noch intuitiver.

  1. appsettings.json: In dieser Datei stehen instanz abhänige Konfigurationseinträge, wie Datenbankverbindungsstrings, Protokollierungseinstellungen und andere Einstellungen, die vom Installation zu Installation variieren.
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}
  1. Controllers Dieser Ordner ist das Rückgrat der WebAPI. Hier finden sich:

    • Controller-Klassen, die die Ressourcen und die zugehörigen Aktionen definieren.
    • Aktionen, die HTTP-Verben wie GET, POST, PUT und DELETE.
using Microsoft.AspNetCore.Mvc;

namespace MeinErstesAspNetProjekt.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
          "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm",
           "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [HttpGet(Name = "GetWeatherForecast")]
        public IEnumerable<WeatherForecast> Get()
        {
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
}
  1. Models (otional) Ein weitere wichtiger Ordner für die Datenintegrität. Hier werden:
    • Datenmodelle festgelegt, die die Form und Struktur der Daten definieren.
    • DTOs (Data Transfer Objects) erstellt, um Daten zwischen verschiedenen Schichten der Anwendung effizient zu übertragen.

In der WebAPI-Schablone sind noch keine Modelle definiert.

  1. Views (optional) Auch wenn es sich um eine API handelt, sind Views dennoch nützlich, wenn:

    • Serverseitiges Rendering benötigt wird.
    • Razor oder andere ASP.NET Core-Views genutzt werden.
  2. Migrations Wird automatisch erstellt bei der Verwendung das Entity Framework Core:

    • Verfolgt und speichert Änderungen im Datenbankschema.
    • Ermöglicht ein reibungsloses Datenbankmanagement über die gesamte Lebensdauer des Projekts hinweg.
  3. Services Ein Platz für:

    • Geschäftslogik, um sicherzustellen, dass Ihre Anwendung korrekt funktioniert.
    • Datenzugriffsmethoden, um Daten effizient zu lesen und zu schreiben.
  4. Extensions (optional) Ein hilfreicher Ordner, um:

    • Erweiterungsmethoden zu organisieren, die häufig verwendet werden.
    • Hilfsklassen zu speichern, die zur Verbesserung des Codes beitragen.