Llamando a un flujo de Power Automate desde .NET
Tags: webdev, csharp, dotnet, powerautomate
Published: 2023-01-12 20:04:28

En este tutorial aprenderemos a llamar un flujo de Power Automate desde .NET, por medio de un HTTP post. Para este objetivo, utilizaremos un ejemplo para enviar un correo electrónico. 

Este es el flujo creado en Power Automate: 

![Power Automate Flow](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hydguerog6ppzoe9o7ik.png)
 
Aquí podemos ver el proceso para crearlo: https://www.c-sharpcorner.com/article/run-a-power-automate-flow-with-an-http-request/

## **1. Implementación en .NET**

En primera instancia, debemos hacer referencia al endpoint de nuestro flujo de Power Automate:


![Power Automate endpoint](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dnydn4gugpw9ue3k1gau.png)
 
```csharp
private string uri = "HTTP POST URL";
```

Luego podemos definir un método en un servicio por ejemplo para poder llamarlo desde alguna parte de nuestra aplicación, y este recibirá como parámetros el `username`, `toAddress`, y el `emailSubject`. La idea con este método es poder preparar la solicitud para el HTTP post, y que el flujo de Power Automate se pueda desencadenar: 

```csharp
public async Task SendEmailAsync(string username, string toAddress, string emailSubject)
{
    try
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(uri);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, client.BaseAddress);
        var body = $"{{\"emailAddress\": \"{toAddress}\",\"emailSubject\":\"{emailSubject}\",\"userName\":\"{username}\"}}";
        var content = new StringContent(body, Encoding.UTF8, "application/json");
        request.Content = content;
        var response = await MakeRequestAsync(request, client);
        Console.WriteLine(response);

    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        throw new Exception();
    }
}
```

Finalmente, podemos contar con un método adicional para poder realizar el HTTP post request, de acuerdo con la solicitud establecida previamente:  

```csharp
public async Task<string> MakeRequestAsync(HttpRequestMessage getRequest, HttpClient client)
{
    var response = await client.SendAsync(getRequest).ConfigureAwait(false);
    var responseString = string.Empty;
    try
    {
        response.EnsureSuccessStatusCode();
        responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
    }
    catch (HttpRequestException)
    {
        // empty responseString
    }

    return responseString;
}
```

## **2. Pruebas con este código en una aplicación web con ASP.NET.**
 
Para realizar las pruebas, vamos a ver un ejemplo en una aplicación web desde ASP.NET que llama a este servicio de Power Automate implementado, para cuando un usuario es agregado desde un formulario, y notificado por correo electrónico con este flujo: 

```csharp
await new PowerAutomateService().SendEmailAsync(student.FirstName, student.Email, "Greetings from ASP.NET / DotVVM web application.");
```

![.NET web form](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z5x94jv2sqv97lvznjy8.png)


![Results in the email](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ql81dmoye7k0as8tyd4c.png)
 
## **Gracias!**

Espero que te haya gustado el artículo. Si tienes alguna pregunta o idea en mente, será un gusto poder estar en comunicación e intercambiar conocimientos entre sí.

Nos vemos en [Twitter](https://twitter.com/esDanielGomez) / [esDanielGomez.com](https://esdanielgomez.com/)!