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 responseConversione 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
- Convalida con Data Annotations
- Regole di FluentValidation
- Regole personalizzate e condizionali
- Integrazione della convalida con le API