Gestire tipi complessi in query string grazie a IParsable in ASP.NET Core 7.0

di Marco De Sanctis, in ASP.NET Core,

Tra le varie novità di .NET 7, una gradita introduzione è stata l'interfaccia IParsable, che espone due membri statici (Parse e TryParse) per effettuare il parsing di string in tipi complessi. Per esempio, immaginiamo di voler rappresentare una somma di denaro con una classe Money, così da tener traccia sia del valore, sia della valuta utilizzata:

public record Money(string Currency, decimal Value) : IParsable<Money>
{
    // altro codice qui...

    public override string ToString()
    {
        return $"Currency: {Currency} - Value: {Value}";
    }
}

Possiamo implementare l'interfaccia IParsable con il codice seguente, in modo da convertire facilmente una string in un oggetto Money:

public static Money Parse(string? value, IFormatProvider? provider)
{
    var tokens = value?.Split(' ');

    if (tokens?.Length != 2)
    {
        throw new ArgumentException("Money must be in the format '{Currency} {Value}'.");
    }

    return new Money(tokens[0], decimal.Parse(tokens[1], provider));
}

public static bool TryParse(string? value, IFormatProvider? provider, out Money result)
{
    try
    {
        result = Money.Parse(value, provider);
        return true;
    }
    catch (Exception)
    {
        result = default;
        return false;
    }
}

A questo punto, possiamo utilizzare il nostro tipo Money in una qualsiasi action, esattamente come faremmo con una string o un int, dato che ASP.NET Core invocherà automaticamente il nostro metodo TryParse per provare a convertire il valore in query string nell'oggetto vero e proprio:

[HttpGet]
public IActionResult Get(Money amount)
{
    return this.Ok(amount);
}

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi