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 sobre CancellationToken
-
O método
PostAsync
deve sempre utilizar umCancellationToken
para garantir que a requisição seja cancelávelvel,dentroevitandodoproblemas em fluxos interrompidos ou expirados.Para recuperar o
CancellationToken
, utilize o método adequado ao contextodoemformulário.que o código está sendo executado. Alguns exemplos:PararecuperarEm
os CancellationToken depende do contexto onde está:Para o contexto deregras de negócio doForm:formulário:FormContext.GetCurrentCancellationToken()
ParaoEm
contextchamadas feitas dentro deApi:uma API customizada:ApiContext.GetCurrentCancellationToken()
-
Em
ParacomponentesoRazorcontext de componente Cshtml(.cshtml) doForm Page: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());
}
}