Skip to main content

Como chamar uma API POST externa dentro do agilityflow

Este exemplo mostra como fazer uma requisição HTTP POST para uma API externa no contexto do AgilityFlow, enviando um identificador no corpo da requisição.

Pré-requisitos:

Importante

  • O método PostAsync deve utilizar CancellationToken para garantir que a requisição seja cancelável dentro do contexto do formulário.

    • Para recuperar os CancellationToken depende do contexto onde está:
    • Para o contexto de  regras de negócio do Form:FormContext.GetCurrentCancellationToken()
    • Para o context de Api:ApiContext.GetCurrentCancellationToken() 
    • Para o context de componente Cshtml do Form Page:  PageContext.GetCurrentCancellationToken()

Observações

  • Troque <<URL_DA_API>> pela URL real da API que deseja acionar.

  • Esse padrão é recomendado quando a API espera dados estruturados via payload, e não via query string.

 

Como chamar a api?

No FormContext

Crie uma regra de negócio e dentro da regra de Programação em C#, utilize o código abaixo

public async Task ExecuteAsync()
{
    var formId = FormContext.FormId.Value.ToString();
    await CallExternalApiAsync(formId);
}

public async Task CallExternalApiAsync(string qualquerParametro)
{
    if (string.IsNullOrWhiteSpace(requestId)) return;

    var payload = new
    {
        parametroParaApi = qualquerParametro
    };

    using (var httpClient = new HttpClient())
    {
        var content = new StringContent(
            JsonConvert.SerializeObject(payload),
            Encoding.UTF8,
            "application/json"
        );

        await httpClient.PostAsync("<<URL_DA_API>>", content, FormContext.GetCurrentCancellationToken());
    }
}

 

Na ApiContext

public async Task RunAsync()
{
    await CallExternalApiAsync("exemplo de parametro");
}

public async Task CallExternalApiAsync(string qualquerParametro)
{
    if (string.IsNullOrWhiteSpace(requestId)) return;

    var payload = new
    {
        parametroParaApi = qualquerParametro
    };

    using (var httpClient = new HttpClient())
    {
        var content = new StringContent(
            JsonConvert.SerializeObject(payload),
            Encoding.UTF8,
            "application/json"
        );

        await httpClient.PostAsync("<<URL_DA_API>>", content, ApiContext.GetCurrentCancellationToken());
    }
}