Backend de .NET Core, modelo con Required nullable siendo creado desde Postman sin enviar los datos requeridos.
Tengo un modelo con la siguiente propiedad:
[Required]
public DateTime? CreatedDate { get; set; }
Esto es obligatorio y nullable, que es exactamente lo que quiero, tratando de evitar fechas vacías o predeterminadas, forzando al usuario o al frontend a enviar una fecha.
Mi Dto no tiene anotaciones y la propiedad no es nullable:
public DateTime CreatedDate { get; set; }
Controlador:
public async Task<iactionresult> Create([FromBody] InputDto input)
{
var creatInputId = await inputService.AddAsync(input);
return Ok(creatInputId);
}
El servicio mapea el Dto al modelo usando Automapper:
var input = _mapper.Map<inputmodel>(inputDto);
Cuando pruebo este controlador desde Postman, la base de datos se actualiza si proporciono una CreatedDate o no, desde el frontend no. Al usar Postman, la CreatedDate en la base de datos se establece en 01-01-0001.
¿Debería usar dataannotations en mi Dto también? Quiero evitar fechas predeterminadas/prohibir guardar la entrada a menos que se proporcione una fecha no predeterminada.
davy.ai
Sí, debes usar anotaciones de datos en tu Dto también para asegurar que el usuario/frontend envíe una fecha válida. Una opción es agregar el atributo
[Required]
a la propiedadCreatedDate
en tu Dto para asegurarte de que no se omita. Además, puedes agregar el atributo[Range]
para restringir el rango de fechas permitidas y evitar valores predeterminados. Por ejemplo:C#
[Required]
[Range(typeof(DateTime), "1/1/1900", "1/1/2100",
ErrorMessage = "Rango de fecha no válido.")]
public DateTime CreatedDate { get; set; }
Esta configuración asegurará que la propiedad
CreatedDate
en tu Dto sea requerida y solo aceptará fechas dentro del rango especificado. Si se proporciona una fecha inválida o predeterminada, la validación automática fallará y la operación no se guardará en la base de datos.