Tengo una enumeración como;
[Flags] public enum MeteoType : ushort { Wind = 1 << 0, Pressure = 1 << 1, Temperature = 1 << 2, Waves = 1 << 4, Currents = 1 << 9, Swell = 1 << 13, WindWave = 1 << 14, }y tengo un modelo;
public class Params { public List<MeteoType> Meteo { get; set; } = new List<MeteoType>() { MeteoType.Wind }; .... }En mi método de controlador, solicito este modelo de consulta como tal;
public async Task<IActionResult> Get(int z, int x, int y, [FromQuery] Params parameters)Lo que me da esta vista en swagger:
Estoy usando List porque es una bandera y quiero poder elegir varios elementos. El problema comienza aquí. Cuando elijo varios elementos, el enlace se crea como:
https://localhost:44311?Meteo=1&Meteo=2&Meteo=4&...
en vez de
https://localhost:44311?Meteo=7&...
¿Cómo puedo hacer que el enlace se genere por la suma de los valores enumerados, en lugar de todos ellos uno por uno?
La especificación OpenAPI no admite parámetros de enumeración bit a bit. Su parámetro Meteo debe definirse como type: integer en la definición de OpenAPI, es decir, debe modificar las anotaciones para que produzcan type: integer en lugar de type: array para este parámetro. Los consumidores deberán proporcionar el valor sumado correcto manualmente.
# OpenAPI definition generated from the code openapi: 3.0.0 ... paths: /something: get: parameters: - in: query name: Meteo schema: type: integer example: 7 description: >- One of the following values, or a sum of multiple values: * 1 - Wind * 2 - Pressure * ... For example, 7 means Wind (1) + Pressure (2) + Temperature (4).Alternativamente, puede intentar bifurcar la interfaz de usuario de Swagger y cambiar el código para enviar los valores de lista seleccionados como un solo valor sumado en lugar de un parámetro de varios valores.