A partir de .NET 6 en ASP.NET API, si desea obtener DateOnly (o TimeOnly ) como parámetro de consulta, debe especificar por separado todos sus campos en lugar de simplemente proporcionar una cadena ("2021-09-14" o " 10:54:53" para TimeOnly ) como puede hacerlo para DateTime .
Pude arreglar eso si son parte del cuerpo agregando un convertidor JSON personalizado ( AddJsonOptions(o => o.JsonSerializerOptions.Converters.Add(...)) ), pero no funciona para los parámetros de consulta.
Sé que eso podría solucionarse con el archivador de modelos, pero no quiero crear un archivador de modelos para cada modelo que contenga DateOnly/TimeOnly . ¿Hay alguna manera de arreglar esta aplicación de ancho?
Manifestación:
Supongamos que tiene una acción siguiente:
[HttpGet] public void Foo([FromQuery] DateOnly date, [FromQuery] TimeOnly time, [FromQuery] DateTime dateTime)
Así es como se representaría en Swagger:
Lo quiero representado como tres campos de cadena: uno para DateOnly , uno para TimeOnly y otro para DateTime (este ya está presente).
PD: No es un problema de Swagger, es uno de ASP.NET. Si trato de pasar ?date=2021-09-14 manualmente, ASP.NET no lo entendería.
También encontré su problema en mi lado y parece que el constructor en sí no admite el modo sin parámetros. Como el siguiente código:
public DateOnly(int year, int month, int day) { throw null; } [NullableContext(1)] public DateOnly(int year, int month, int day, Calendar calendar) { throw null; }Mientras que DateTime admite:
public DateTime Date { get { throw null; } } Por lo tanto, me temo que antes de algunas actualizaciones en DateOnly y TimeOnly , todos necesitamos usar string en su lugar y dividir la cadena en año, mes y día y luego new DateOnly(int year, int month, int day) .