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.

 

Importante sobre CancellationToken

O método PostAsync deve sempre utilizar um CancellationToken para garantir que a requisição seja cancelável, evitando problemas em fluxos interrompidos ou expirados.

Para recuperar o CancellationToken, utilize o método adequado ao contexto em que o código está sendo executado. Alguns exemplos:

  • Em regras de negócio do formulário:
    FormContext.GetCurrentCancellationToken()

  • Em chamadas feitas dentro de uma API customizada:
    ApiContext.GetCurrentCancellationToken()

  • Em componentes Razor (.cshtml) do formulário:
    PageContext.GetCurrentCancellationToken()

  • E assim por diante, conforme o contexto (GlobalContext, CardContext, etc.)

Basta utilizar o método GetCurrentCancellationToken() do contexto atual.

 

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());
    }
}