Convalida con Data Annotations
Convalidi i modelli con gli attributi.
Convalida con Data Annotations è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 1 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.
Che cos'è la convalida con Data Annotations
Le Data Annotations sono attributi che si applicano alle proprietà del modello per dichiarare le regole di convalida direttamente nelle classi C#. ASP.NET Core legge questi attributi durante il model binding e convalida automaticamente le richieste in ingresso.
Risiedono nello spazio dei nomi System.ComponentModel.DataAnnotations.
using System.ComponentModel.DataAnnotations;
public class RegisterRequest
{
[Required]
public string Username { get; set; }
}L'attributo [Required]
[Required] garantisce che una proprietà non sia null (e, per impostazione predefinita, nemmeno una stringa vuota). Se il client omette il campo, la convalida del modello non va a buon fine prima dell'esecuzione dell'azione.
È possibile personalizzare il messaggio con ErrorMessage.
public class RegisterRequest
{
[Required(ErrorMessage = "Username is required.")]
public string Username { get; set; }
[Required]
public string Password { get; set; }
}Convalida dei numeri con [Range]
[Range] limita un valore numerico a un minimo e a un massimo inclusivi. Funziona con int, double, decimal e altri tipi.
Lo utilizzi per età, quantità, valutazioni e qualsiasi numero con limiti prefissati.
public class ProductRequest
{
[Range(1, 1000, ErrorMessage = "Quantity must be between 1 and 1000.")]
public int Quantity { get; set; }
[Range(0.01, 9999.99)]
public decimal Price { get; set; }
}Convalida delle email con [EmailAddress]
[EmailAddress] verifica che una stringa abbia l'aspetto di un indirizzo email valido. Lo combini con [Required] per assicurarsi che il campo sia presente e ben formato.
public class ContactRequest
{
[Required]
[EmailAddress(ErrorMessage = "Please enter a valid email.")]
public string Email { get; set; }
}Vincoli sulla lunghezza delle stringhe
[StringLength] imposta una lunghezza massima e, facoltativamente, minima per il testo. [MinLength] e [MaxLength] sono alternative più semplici.
public class RegisterRequest
{
[Required]
[StringLength(20, MinimumLength = 3)]
public string Username { get; set; }
[MaxLength(500)]
public string Bio { get; set; }
}Corrispondenza dei pattern con [RegularExpression]
[RegularExpression] convalida una stringa rispetto a un pattern regex. È ideale per formati come numeri di telefono, codici postali o slug.
public class ProfileRequest
{
[RegularExpression(@"^[a-z0-9-]+$",
ErrorMessage = "Slug may only contain lowercase letters, digits and dashes.")]
public string Slug { get; set; }
}Confronto di due campi con [Compare]
[Compare] garantisce che una proprietà corrisponda a un'altra. Il caso classico è la conferma di una password.
public class RegisterRequest
{
[Required]
public string Password { get; set; }
[Compare(nameof(Password), ErrorMessage = "Passwords do not match.")]
public string ConfirmPassword { get; set; }
}Come ModelState segnala gli errori
Quando la convalida non va a buon fine, ASP.NET Core inserisce gli errori in ModelState. In un controller API decorato con [ApiController], le richieste non valide restituiscono automaticamente una risposta 400, quindi raramente è necessario verificarlo manualmente.
[ApiController]
[Route("api/[controller]")]
public class AccountController : ControllerBase
{
[HttpPost("register")]
public IActionResult Register(RegisterRequest request)
{
// [ApiController] already returned 400 if invalid
return Ok("Registered " + request.Username);
}
}Controlli manuali di ModelState
Senza [ApiController], ad esempio nei controller MVC, verifichi personalmente ModelState.IsValid e decida come rispondere.
public IActionResult Register(RegisterRequest request)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
return Ok();
}Combinazione di più annotazioni
Le annotazioni si sommano. Una singola proprietà può avere diversi attributi e tutti devono essere superati. L'ordine non influisce sulla valutazione, ma è opportuno mantenerli leggibili.
public class SignupRequest
{
[Required]
[EmailAddress]
[StringLength(254)]
public string Email { get; set; }
[Required]
[Range(18, 120, ErrorMessage = "Must be 18 or older.")]
public int Age { get; set; }
}Quando Data Annotations non sono sufficienti
Le Data Annotations sono ottime per regole semplici e dichiarative. Tuttavia, la logica tra proprietà, le ricerche nel database o le regole condizionali («obbligatorio solo quando X») diventano rapidamente scomode. È qui che FluentValidation dà il meglio di sé, come vedremo nella prossima lezione.
Verifica rapida
Verifichi la sua comprensione delle Data Annotations.
Riepilogo
Ha appreso che le Data Annotations dichiarano le regole di convalida come attributi: [Required] per la presenza, [Range] per i limiti numerici, [EmailAddress] per il formato email, oltre a [StringLength], [RegularExpression] e [Compare]. Con [ApiController], gli errori restituiscono automaticamente 400 tramite ModelState. Per le regole complesse, il passo successivo è FluentValidation.
Domande Frequenti
La lezione «Convalida con Data Annotations» è gratuita?
Sì — il testo completo di «Convalida con Data Annotations» è 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 «Convalida con Data Annotations»?
Convalidi i modelli con gli attributi. 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 1 di 4.
Quanto tempo richiede la lezione «Convalida con Data Annotations»?
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