es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Leer parámetros dinámicos desde appsettings.json.

Estoy trabajando en el proyecto APIExecutor que es una aplicación de consola que lee la configuración requerida del archivo Appsettings.json, que es como se muestra a continuación:

{
  "APIConfig": {
    "RootAPI": "https://hub.dummyapis.com",
    "API": [
      {
        "Url": "/employee",
        "Method": "GET",
        "Params": {
          "noofRecords": 10,
          "idStarts": 1001
        },
        "RequestType": "application/json",
        "Headers": null
      },
      {
        "Url": "/student",
        "Method": "POST",
        "Params": {
          "name": "ABC",
          "adress": "bla bla bla",
          "IsPassed": true
        },
        "RequestType": "application/json",
        "Headers": null
      }
    ]
  }
}

Quería mapearlo en la siguiente clase:

public class APIConfig {
     public string Url { get; set; }
     public string Method { get; set; }
     public dynamic Params { get; set; }
     public string RequestType { get; set; }
     public List<requestheaders> Headers { get; set; }
}

En los parámetros anteriores, Params puede ser cualquier cosa, no sé cuál debe ser el tipo de Params, depende estrictamente de la llamada a la API. Por lo tanto, intenté hacerlo dinámico y objeto, pero cuando intento obtenerlo como se muestra a continuación:

var config = _builder.GetSection("APIConfig").Get<apiconfig>();

Aquí, _builder es una instancia de IConfiguration.

Ten en cuenta que los Params no están fijos. Puede ser cualquier cosa, dependiendo de la llamada a la API.

Obtengo null en la configuración. Sé que es debido a los parámetros dinámicos. Si elimino ese parámetro, se mapea correctamente.

No encuentro ninguna forma de mapear parámetros dinámicos al leer la configuración desde appsettings.json.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para asignar parámetros dinámicos en Appsettings.json

    Para asignar parámetros dinámicos en Appsettings.json mientras se utiliza IConfiguration para leer configuraciones, podemos utilizar un Dictionary<string, object=""> en lugar del parámetro dynamic.

    Aquí hay un ejemplo de cómo podemos modificar la clase APIConfig para usar un Dictionary<string, object=""> para la propiedad Params:

    public class APIConfig {
         public string Url { get; set; }
         public string Method { get; set; }
         public Dictionary<string, object=""> Params { get; set; }
         public string RequestType { get; set; }
         public List<requestheaders> Headers { get; set; }
    }
    

    Ahora, al leer la sección APIConfig de Appsettings.json, podemos agregar los parámetros dinámicos a la propiedad Params utilizando un Dictionary<string, object=""> de la siguiente manera:

    {
      "APIConfig": {
        "RootAPI": "https://hub.dummyapis.com",
        "API": [
          {
            "Url": "/employee",
            "Method": "GET",
            "Params": {
              "noofRecords": 10,
              "idStarts": 1001
            },
            "RequestType": "application/json",
            "Headers": null
          },
          {
            "Url": "/student",
            "Method": "POST",
            "Params": {
              "name": "ABC",
              "adress": "bla bla bla",
              "IsPassed": true,
              "OtherParameter": 12345 // Otro parámetro dinámico
            },
            "RequestType": "application/json",
            "Headers": null
          }
        ]
      }
    }
    

    Utilizando este enfoque, podemos asignar parámetros dinámicos en Appsettings.json sin problemas.

    Cuando leemos la configuración utilizando IConfiguration, obtendremos la propiedad Params como un Dictionary<string, object=""> que podemos utilizar para extraer los parámetros dinámicos.

    var config = _builder.GetSection("APIConfig").Get<apiconfig>();
    
    foreach(var api in config.API)
    {
        foreach(var param in api.Params)
        {
            Console.WriteLine($"{param.Key} - {param.Value}");
        }
    }
    

    El código anterior imprimirá la siguiente salida:

    noofRecords - 10
    idStarts - 1001
    name - ABC
    adress - bla bla bla
    IsPassed - True
    OtherParameter - 12345
    

    Por lo tanto, utilizando un Dictionary<string, object=""> en lugar del parámetro dynamic, podemos asignar parámetros dinámicos al leer la configuración de Appsettings.json.</string,></string,></string,></string,></string,></string,>

Comments are closed.