2
votes

Comment passer des paramètres par POST à ​​Azure Functions 2

Je souhaite transmettre des paramètres à HttpTrigger Type dans Azure Function 2. Je vois une réponse pour la fonction Azure 1 dans le lien ci-dessous.

Comment passer des paramètres par POST à ​​une fonction Azure?

La réponse dans le lien ci-dessus est wait req.Content.ReadAsAsync (); Je cherche la réponse similaire pour Azure Function 2.

Ici, nous utilisons la classe HttpRequest au lieu de la classe HttpRequestMessage.

Voici le code.

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


0 commentaires

3 Réponses :


4
votes
public static async void Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]
            HttpRequest req,
            ILogger log)
        {
            var content = await new StreamReader(req.Body).ReadToEndAsync();

            MyClass myClass = JsonConvert.DeserializeObject<MyClass>(content);

        }
You can have a custom class which can be sent in the form of JSON from the post request.

0 commentaires

7
votes

Il semble que vous essayez d'envoyer une requête POST à Azure Function V2 . Consultez l'extrait de code ci-dessous.

Classe de demande personnalisée:

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

            //Read Request Body
            var content = await new StreamReader(req.Body).ReadToEndAsync();

            //Extract Request Body and Parse To Class
            Users objUsers = JsonConvert.DeserializeObject<Users>(content);

            //Post Reuqest to another API 
            HttpClient client = new HttpClient();
            var json = JsonConvert.SerializeObject(objUsers);
            //Parsing json to post request content
            var stringContent = new StringContent(json, UnicodeEncoding.UTF8, "application/json");
            //Posting data to remote API
            HttpResponseMessage responseFromApi = await client.PostAsync("YourRequstURL", stringContent);

            //Variable for next use to bind remote API response
            var remoteApiResponse = "";
            if (responseFromApi.IsSuccessStatusCode)
            {
               remoteApiResponse = responseFromApi.Content.ReadAsStringAsync().Result; // According to your sample, When you read from server response
            }

            //As we have to return IAction Type So converting to IAction Class Using OkObjectResult We Even Can Use OkResult
            var result = new OkObjectResult(remoteApiResponse);
            return (IActionResult)result;
        }

Fonction Azure V2:

Dans cet exemple, je prends deux paramètres en utilisant une classe personnalisée et je renvoie cette propriété de deux classes comme réponse.

{
   "Name": "Kiron" ,
   "Email": "kiron@email.com"
}

Demander un échantillon:

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

            //Read Request Body
            var content = await new StreamReader(req.Body).ReadToEndAsync();

            //Extract Request Body and Parse To Class
            Users objUsers = JsonConvert.DeserializeObject<Users>(content);

            //As we have to return IAction Type So converting to IAction Class Using OkObjectResult We Even Can Use OkResult
            var result = new OkObjectResult(objUsers);
            return (IActionResult)result;
        }

Test PostMan:

 entrez la description de l'image ici

Remarque: Vous recherchez wait req.Content.ReadAsAsync (); ceci en fait nécessaire pour envoyer une requête POST depuis votre fonction. Et lire sur ce serveur répond. Mais rappelez-vous que req.Content n'est pas pris en charge en tant que demande de lecture de message dans Azure Function V2 qui a montré l'exemple de Function V1 ici

Un autre exemple:

Voir l'extrait de code ci-dessous:

public class Users
    {

        public string Name { get; set; }
        public string Email { get; set; }

    }

J'espère que vous comprenez, si vous avez encore des questions, n'hésitez pas à les partager. Merci et bon codage!


2 commentaires

un avantage à utiliser un DTO personnalisé pour simplement dynamique comme JObject ?


@l --'''''--------- '' '' '' '' '' '' Pour autant que je sache, vous pouvez également utiliser dynamic car il est de type sécurisé, mais si vous savent déjà quel type de données il serait préférable d’utiliser à la place. Lorsque nous utilisons un compilateur dynamique, nous devons rechercher chaque type de données, ce qui est un peu coûteux.



0
votes

Dans un premier temps, créez un projet de fonction Azure (ou ajoutez à votre solution) basé sur la demande HTTP. déclencheur. Dans la classe unique sur le projet créé, vous pouvez voir un exemple. Vous avez transmis JSON à partir du corps de la requête:

 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 requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        string name = data.name;
        ...

et le convertissez simplement en variable dans votre code:

{"name":"John"}


0 commentaires