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)qualquerParametro)) 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
Na programação em C#
public async Task RunAsync()
{
await CallExternalApiAsync("exemplo de parametro");
}
public async Task CallExternalApiAsync(string qualquerParametro)
{
if (string.IsNullOrWhiteSpace(qualquerParametro)) 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());
}
}
No PageContext
Na programação em C#
@{
string qualquerParametro = "";
if (!string.IsNullOrWhiteSpace(qualquerParametro)){
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, PageContext.GetCurrentCancellationToken());
}
}
}
No GlobalContext
Na programação em C#
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.GlobalContext.GetCurrentCancellationToken());
}
}