0Pricing
C# Academy · Lezione

Integrazione della convalida con le API

Restituisca risposte chiare sugli errori di convalida.

Integrazione della convalida con le API è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.

Integrazione di FluentValidation in ASP.NET Core

Per convalidare automaticamente le richieste, registri i validatori tramite l'iniezione delle dipendenze. L'helper AddValidatorsFromAssembly analizza un assembly e registra ogni validatore trovato.

using FluentValidation;

builder.Services
    .AddValidatorsFromAssemblyContaining<CustomerValidator>();

Middleware di convalida automatica

Le versioni moderne di FluentValidation privilegiano la convalida esplicita, ma è possibile abilitare la convalida automatica, che si integra con il model binding per rifiutare le richieste non valide prima dell'esecuzione dell'azione.

dotnet add package FluentValidation.AspNetCore

builder.Services.AddFluentValidationAutoValidation();

Validatori risolti tramite DI

Poiché i validatori sono registrati tramite DI, possono iniettare servizi come i repository, consentendo alle regole asincrone basate sul database di funzionare senza problemi nell'API.

public class UserValidator : AbstractValidator<UserRequest>
{
    public UserValidator(IUserRepository repo)
    {
        RuleFor(u => u.Email)
            .MustAsync(async (e, ct) => !await repo.ExistsAsync(e));
    }
}

Convalida esplicita in un endpoint

Molti team preferiscono la convalida esplicita per maggiore chiarezza. Inietti IValidator<T> e lo chiami all'inizio del gestore.

app.MapPost("/users", async (
    UserRequest request,
    IValidator<UserRequest> validator) =>
{
    var result = await validator.ValidateAsync(request);
    if (!result.IsValid)
        return Results.ValidationProblem(result.ToDictionary());
    return Results.Ok();
});

Che cos'è ProblemDetails

ProblemDetails (RFC 7807) è un formato JSON standard per le risposte di errore HTTP. Contiene campi come type, title, status e detail, offrendo ai client una struttura degli errori prevedibile.

{
  "type": "https://tools.ietf.org/html/rfc7231",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "errors": { "Email": ["Email is required."] }
}

ValidationProblemDetails

Per gli errori di convalida, ASP.NET Core utilizza ValidationProblemDetails, che estende ProblemDetails con un dizionario errors che associa ogni campo ai relativi messaggi.

return Results.ValidationProblem(result.ToDictionary());
// Produces a 400 ValidationProblemDetails response

Conversione dei risultati di FluentValidation

L'estensione ToDictionary() trasforma un ValidationResult nel dizionario field -> messages richiesto da ValidationProblem.

var result = await validator.ValidateAsync(request);
if (!result.IsValid)
{
    IDictionary<string, string[]> errors = result.ToDictionary();
    return Results.ValidationProblem(errors);
}

Personalizzazione dell'output di ProblemDetails

Usi AddProblemDetails e un personalizzatore per arricchire ogni risposta di errore, ad esempio aggiungendo un trace id per il debug.

builder.Services.AddProblemDetails(options =>
{
    options.CustomizeProblemDetails = ctx =>
        ctx.ProblemDetails.Extensions["traceId"] =
            ctx.HttpContext.TraceIdentifier;
});

Validazione nei controller MVC

Con la validazione automatica abilitata e [ApiController], le azioni dei controller restituiscono automaticamente anche ValidationProblemDetails quando una richiesta non è valida, mantenendo coerente il formato tra tutti gli endpoint.

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpPost]
    public IActionResult Create(UserRequest request) => Ok();
}

Un filtro di validazione per le Minimal API

È possibile centralizzare la validazione esplicita con un filtro per endpoint, così ogni gestore rimane pulito.

app.MapPost("/users", (UserRequest r) => Results.Ok())
   .AddEndpointFilter<ValidationFilter<UserRequest>>();

Scegliere tra validazione automatica ed esplicita

La validazione automatica è comoda, ma nasconde il passaggio di validazione; quella esplicita è più verbosa, ma trasparente e più facile da testare. Molti team scelgono la validazione esplicita insieme a un filtro condiviso, ottenendo il meglio di entrambe.

Controllo rapido

Verifichi l'integrazione della validazione nell'API.

Riepilogo

Integrare la validazione significa registrare i validator con AddValidatorsFromAssembly, abilitare facoltativamente la validazione automatica e restituire gli errori come ValidationProblemDetails tramite Results.ValidationProblem(result.ToDictionary()). La DI consente ai validator di usare repository per le regole asincrone; inoltre è possibile personalizzare ProblemDetails o usare filtri per endpoint per mantenere puliti i gestori.

Domande Frequenti

La lezione «Integrazione della convalida con le API» è gratuita?

Sì — il testo completo di «Integrazione della convalida con le API» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.

Cosa imparerò in «Integrazione della convalida con le API»?

Restituisca risposte chiare sugli errori di convalida. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Integrazione della convalida con le API»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Convalida con Data Annotations
  2. Regole di FluentValidation
  3. Regole personalizzate e condizionali
  4. Integrazione della convalida con le API
← Torna a C# Academy