A volte capita che l'utente inserisca dei dati in una textarea o in una textbox facendo copia/incolla da un documento word o altre applicazioni simili. In questi casi, vengono incollati anche i caratteri speciali che possono creare problemi in fase di salvataggio o nel momento in cui questi vengono visualizzati o stampati.
Per evitare che questi caratteri sporchi vengano salvati sul database, possiamo intercettare la fase di persistenza e ripulire le proprietà. Il seguente codice mostra come fare.
public override int SaveChanges()
{
foreach (var entry in this.ChangeTracker.Entries()
.Where(
c => c.State == EntityState.Added ||
c.State == EntityState.Modified))
{
foreach (var propertyName in entry.OriginalValues.PropertyNames)
{
var property = entry.Property(propertyName);
if (property.IsModified &&
property.ParentProperty == null &&
property.CurrentValue is string)
{
string r = "[\x00-\x08\x0B\x0C\x0E-\x1F\x26]";
property.CurrentValue = Regex.Replace(
property.CurrentValue.ToString(), r, "", RegexOptions.Compiled);
}
}
}
return base.SaveChanges();
}
Per prima cosa nella classe di contesto facciamo l'override del metodo SaveChanges. All'interno di questo metodo ricerchiamo tutte le classi marcate per modificare il database. Per ognuna di queste recuperiamo le proprietà e per quelle che sono modificate, semplici e di tipo stringa lanciamo una regular expression che ne elimina i caratteri speciali.
Il problema di questo approccio sta nel fatto che rallenta la fase di persistenza soprattutto quando ci sono molte classi. Tuttavia, il fatto di avere un punto unico dove gestire questa problematica rappresenta sicuramente un grosso vantaggio.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire il colore CSS con HWB
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Creare una libreria CSS universale - Rotazione degli elementi
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Combinare Container Queries e Media Queries
Utilizzare il trigger SQL con le Azure Function
Eliminare una project wiki di Azure DevOps
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Collegare applicazioni server e client con .NET Aspire
Filtering sulle colonne in una QuickGrid di Blazor