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