Diciamo che ho il seguente modello:
public class Product
{
public string Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
Ora vorrei davvero consentire alle persone di aggiungere e visualizzare il mio catalogo di prodotti. Quindi, creo il seguente controller:
Nota: si prega di non essere troppo schifato dalla lista statica. So che è sbagliato.
public class ProductsController : ApiController
{
static readonly List<Product> products = new List<Product>();
// ...
[HttpPost]
public void AddProduct(Product value)
{
products.Add(product);
}
}
Come forse avrai notato, attualmente sto consentendo alle persone di aggiungere nuovi prodotti con valori personalizzati di Id
. Questo non mi sembra giusto. Dovrei avere il controllo degli identificatori dei miei prodotti, giusto? Non voglio dare alle persone l'idea di poterle impostare.
La mia tentata soluzione era creare un DTO per il mio modello di prodotto, quindi installare il pacchetto AutoMapper .
Ecco il DTO:
public class ProductDto
{
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
Ed ecco il nuovo controller:
public class ProductsController : ApiController
{
static readonly List<Product> products = new List<Product>();
// ...
[HttpPost]
public void AddProduct(ProductDto value)
{
Product product = Mapper.Map<Product>(value);
product.Id = Guid.NewGuid().ToString();
products.Add(product);
}
}
È ragionevole? Esiste un approccio più semplice e più canonico?
Grazie!