Tengo una aplicación de lógica azul que se activa cuando aparece un correo electrónico, luego la tengo vinculada a una función azul activada por http. Estoy tratando de leer algunos parámetros en la función, pasados ​​desde la aplicación lógica. ¿Alguien puede decirme qué estoy haciendo mal?

screenshot of logic setup

Código en función azul

        [FunctionName("Function1")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];
        string attachmentName = req.Query["attachmentName"];
        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);


        name = name ?? data?.name;

El nombre se completa correctamente, pero el nombre del archivo adjunto se ignora. Creo que tiene algo que ver con la última línea de código. data.name. No entiendo qué está haciendo esa línea.

1
solarissf 21 ene. 2021 a las 21:32

1 respuesta

La mejor respuesta

Según la prueba, req.Query obtiene parámetros en forma de <your-url>? parameter1 = value1&parameter2 = value2. En otras palabras, req.Query solo puede obtener los parámetros en la solicitud Get.

Estás enviando una solicitud de publicación, por lo que el uso de req.Query no puede obtener los parámetros que deseas.

Creo que tiene algo que ver con la última línea de código. data.name. No entiendo qué está haciendo esa línea.

Este código sirve para juzgar si el nombre está vacío, si está vacío, entonces name = data? Name.

req.Query no obtuvo el valor de nombre, por lo que este código obtiene el valor de nombre de data?.name, por lo que esta es la razón por la que name tiene un valor pero attachmentName no valor en su resultado.

El código correcto debería verse así:

    public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];
            string attachmentName = req.Query["attachmentName"];
            
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            
            name = name ?? data?.name;
            attachmentName = attachmentName ?? data?.attachmentName;

            log.LogInformation(name);
            log.LogInformation(attachmentName);

            return new OkObjectResult(name);
        }
    }
0
Frank Gong 22 ene. 2021 a las 02:45