A Verifalia fornece uma API simples baseada em HTTPS para validar endereços de e-mail em tempo real e verificar se eles podem ser entregues ou não; esta biblioteca SDK integra-se com Verifalia e permite verificar endereços de e-mail nas seguintes plataformas:
Para saber mais sobre a Verifalia, consulte https://verifalia.com
A maneira melhor e mais fácil de adicionar a biblioteca SDK de verificação de e-mail da Verifalia ao seu projeto .NET é usar o gerenciador de pacotes NuGet.
No Visual Studio, você pode usar a GUI do NuGet para pesquisar e instalar o pacote Verifalia NuGet. Ou, como atalho, simplesmente digite o seguinte comando no Console do Gerenciador de Pacotes:
Install-Package Verifalia
Como alternativa para adicionar o SDK da Verifalia à sua solução .NET, você pode baixar o projeto de origem do SDK do github, extraí-lo para uma pasta de sua escolha e adicionar uma referência do seu próprio projeto ao projeto do SDK da Verifalia. O projeto SDK é um projeto C# que também pode ser referenciado e usado com qualquer outra linguagem .NET, incluindo Visual Basic (VB.NET), C++/CLI, J#, IronPython, IronRuby, F# e PowerShell.
Saiba mais em https://verifalia.com
Comecemos pelo princípio: a autenticação na API da Verifalia é realizada por meio das credenciais da sua conta raiz da Verifalia ou de um de seus usuários (anteriormente conhecidos como subcontas): se você não possui uma conta da Verifalia, basta registrar-se em um grátis. Por razões de segurança, é sempre aconselhável criar e utilizar um usuário dedicado para acessar a API, pois isso permitirá atribuir-lhe apenas as permissões específicas necessárias.
Saiba mais sobre a autenticação na API da Verifalia em https://verifalia.com/developers#authentication
Depois de ter suas credenciais da Verifalia em mãos, use-as ao criar uma nova instância do tipo VerifaliaRestClient
, que será o ponto de partida para todas as outras operações na API da Verifalia: as credenciais fornecidas serão fornecidas automaticamente à API usando o HTTP Basic Método de autenticação.
using Verifalia . Api ;
var verifalia = new VerifaliaRestClient ( "username" , "password" ) ;
Além do método HTTP Basic Auth, este SDK também oferece suporte a outras maneiras diferentes de autenticação na API Verifalia, conforme explicado nas seções subsequentes.
A autenticação de portador oferece maior segurança em relação ao HTTP Basic Auth, já que o último requer o envio das credenciais reais em cada chamada de API, enquanto o primeiro exige isso apenas em uma primeira solicitação de autenticação dedicada. Por outro lado, a primeira solicitação de autenticação necessária para a autenticação Bearer leva um tempo não desprezível: se você precisar realizar apenas uma única solicitação, usar HTTP Basic Auth fornece o mesmo grau de segurança e também é mais rápido.
using Verifalia . Api ;
using Verifalia . Api . Security ;
var verifalia = new VerifaliaRestClient ( new BearerAuthenticationProvider ( "username" , "password" ) ) ;
O tratamento da autenticação multifator (MFA) também é possível definindo uma implementação personalizada da interface ITotpTokenProvider
, que deve ser usada para adquirir a senha única baseada em tempo de um aplicativo ou dispositivo autenticador externo: para adicionar autenticação multifator a sua conta root da Verifalia, defina suas configurações de segurança.
using Verifalia . Api ;
using Verifalia . Api . Security ;
class MyTotpProvider : ITotpTokenProvider
{
public Task < string > ProvideTotpTokenAsync ( CancellationToken cancellationToken )
{
// Ask the user to type his or her TOTP token
Console . WriteLine ( "Acquire your TOTP token and type it here:" ) ;
var totpToken = Console . ReadLine ( ) ;
return Task . FromResult ( totpToken ) ;
}
}
// ...
var verifalia = new VerifaliaRestClient ( new BearerAuthenticationProvider ( "username" , "password" , new MyTotpProvider ( ) ) ) ;
Este método de autenticação utiliza um certificado de cliente criptográfico X.509 para autenticação na API Verifalia, por meio do protocolo TLS. Esse método, também chamado de autenticação TLS mútua (mTLS) ou autenticação bidirecional, oferece o mais alto grau de segurança, pois apenas uma chave derivada criptograficamente (e não as credenciais reais) é enviada pela rede em cada solicitação.
using Verifalia . Api ;
using Verifalia . Api . Security ;
var verifalia = new VerifaliaRestClient ( new X509Certificate2 ( "mycertificate.pem" ) ) ;
Toda operação relacionada à verificação/validação de endereços de e-mail é realizada por meio da propriedade EmailValidations
exposta pela instância VerifaliaRestClient
que você criou acima. A propriedade está repleta de métodos úteis, cada um com muitas sobrecargas: nos próximos parágrafos veremos os mais usados, por isso é altamente recomendável explorar a biblioteca e consultar a ajuda do xmldoc incorporado para outras oportunidades.
A biblioteca aguarda automaticamente a conclusão dos trabalhos de verificação de e-mail : se necessário, é possível ajustar as opções de espera e ter mais controle sobre todo o processo de votação subjacente. Consulte a seção Opções de espera abaixo para obter detalhes adicionais.
Para validar um endereço de e-mail de uma aplicação .NET você pode invocar o método SubmitAsync()
: ele aceita um ou mais endereços de e-mail e quaisquer opções de verificação que você queira passar para a Verifalia, incluindo a qualidade dos resultados esperados, preferências de desduplicação, prioridade de processamento.
Nota Caso você precise verificar uma lista de endereços de e-mail, é aconselhável enviá-los todos de uma vez por meio de uma das sobrecargas dedicadas do método
SubmitAsync()
(veja as próximas seções), em vez de iterar no conjunto de origem e enviar o aborda um por um. Não apenas o método tudo de uma vez seria mais rápido, mas também permitiria detectar e marcar itens duplicados - um recurso que não está disponível durante a verificação dos endereços de e-mail um por um.
No exemplo a seguir, verificamos um endereço de email com esta biblioteca, usando as opções padrão:
var job = await verifalia
. EmailValidations
. SubmitAsync ( "[email protected]" ) ;
// At this point the address has been validated: let's print its email validation
// result to the console.
var entry = job . Entries [ 0 ] ;
Console . WriteLine ( $ "Classification: { entry . Classification } (status: { entry . Status } )" ) ;
// Classification: Deliverable (status: Success)
Como seria de esperar, cada entrada pode incluir vários detalhes adicionais sobre o endereço de e-mail verificado:
Propriedade | Descrição |
---|---|
AsciiEmailAddressDomainPart | Obtém a parte do domínio do endereço de e-mail, convertida para ASCII, se necessário, e com comentários e espaços em branco dobráveis removidos. |
Classification | O valor ValidationEntryClassification para esta entrada. |
CompletedOn | A data em que esta entrada foi concluída, se disponível. |
Custom | Uma string personalizada e opcional que é devolvida após a conclusão da validação. Para transmitir um valor personalizado, use a propriedade Custom de ValidationRequestEntry . |
DuplicateOf | O índice baseado em zero da primeira ocorrência deste endereço de e-mail no pai Validation , caso o Status desta entrada seja Duplicate ; itens duplicados não expõem nenhum detalhe do resultado além deste e dos eventuais valores Custom . |
Index | O índice desta entrada dentro do seu contêiner Validation ; esta propriedade é útil principalmente no caso de a API retornar uma visualização filtrada dos itens. |
InputData | A string de entrada que está sendo validada. |
EmailAddress | Obtém o endereço de e-mail, sem qualquer comentário ou dobramento de espaços em branco. Retorna nulo se os dados de entrada não forem um endereço de email sintaticamente inválido. |
EmailAddressDomainPart | Obtém a parte do domínio do endereço de e-mail, sem comentários e espaços em branco dobráveis. |
EmailAddressLocalPart | Obtém a parte local do endereço de e-mail, sem comentários e espaços em branco dobráveis. |
HasInternationalDomainName | Se for verdade, o endereço de e-mail possui um nome de domínio internacional. |
HasInternationalMailboxName | Se for verdade, o endereço de email terá um nome de caixa de correio internacional. |
IsDisposableEmailAddress | Se for verdade, o endereço de e-mail vem de um provedor de endereço de e-mail descartável (DEA). O que é um endereço de e-mail descartável? |
IsFreeEmailAddress | Se for verdade, o endereço de e-mail vem de um provedor de endereços de e-mail gratuito (por exemplo, Gmail, Yahoo, Outlook/Hotmail, ...). |
IsRoleAccount | Se for verdade, a parte local do endereço de e-mail é uma conta de função conhecida. |
Status | O valor ValidationEntryStatus para esta entrada. |
Suggestions | As possíveis correções para os dados de entrada, caso a Verifalia tenha identificado possíveis erros de digitação durante o processo de verificação. |
SyntaxFailureIndex | A posição do caractere no endereço de e-mail que eventualmente causou falha na validação da sintaxe. |
Aqui está outro exemplo, mostrando alguns dos detalhes adicionais dos resultados fornecidos pela Verifalia:
var job = await verifalia
. EmailValidations
. SubmitAsync ( "bat[[email protected]" ) ;
var entry = job . Entries [ 0 ] ;
Console . WriteLine ( $ "Classification: { entry . Classification } " ) ;
Console . WriteLine ( $ "Status: { entry . Status } " ) ;
Console . WriteLine ( $ "Syntax failure index: { entry . SyntaxFailureIndex } " ) ;
if ( entry . Suggestions != null )
{
Console . WriteLine ( "Suggestions:" ) ;
foreach ( var suggestion in entry . Suggestions )
{
Console . WriteLine ( $ "- { suggestion } " ) ;
}
}
// Classification: Undeliverable
// Status: InvalidCharacterInSequence
// Syntax failure index: 3
// Suggestions:
// - [email protected]
Para verificar uma lista de endereços de e-mail - em vez de um único endereço - é possível usar a sobrecarga do método SubmitAsync()
que aceita um IEnumerable<string>
; se os endereços de e-mail a serem verificados estiverem originalmente armazenados em um arquivo, também é possível simplesmente fazer upload do arquivo e fazer com que a Verifalia o importe e verifique automaticamente - consulte a próxima seção para obter detalhes.
Aqui está um exemplo que mostra como verificar um array com alguns endereços de e-mail:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new [ ] {
"[email protected]" ,
"[email protected]" ,
"[email protected]"
} ) ;
Console . WriteLine ( $ "Job ID: { job . Overview . Id } " ) ;
foreach ( var entry in job . Entries )
{
Console . WriteLine ( $ "- { entry . InputData } => { entry . Classification } ( { entry . Status } )" ) ;
}
// Job Id: 290b5146-eeac-4a2b-a9c1-61c7e715f2e9
// - [email protected] => Deliverable (Success)
// - [email protected] => Undeliverable (DomainIsMisconfigured)
// - [email protected] => Deliverable (Success)
Esta biblioteca inclui suporte para envio e validação de arquivos com endereços de e-mail, incluindo:
Para enviar e validar arquivos, ainda pode-se usar o método SubmitAsync()
mencionado acima, passando uma instância Stream
ou FileInfo
ou apenas um byte[]
com o conteúdo do arquivo. Junto com isso, também é possível especificar as eventuais linhas iniciais e finais a serem processadas, a coluna, o índice da planilha, o final da linha e o delimitador - dependendo, é claro, da natureza do arquivo enviado (veja FileValidationRequest
na fonte para saber mais).
Veja como enviar e verificar um arquivo Excel, por exemplo:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new FileInfo ( "that-file.xslx" ) ) ;
Para opções mais avançadas, basta passar a instância FileValidationRequest
para o método SubmitAsync()
:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new FileValidationRequest ( new FileInfo ( "that-file.xslx" ) )
{
Sheet = 3 ,
StartingRow = 1 ,
Column = 5
} ,
quality : QualityLevelName . High ) ;
E aqui está outro exemplo, mostrando como enviar uma instância Stream
e especificando o tipo de conteúdo MIME do arquivo, que é determinado automaticamente a partir da extensão do arquivo no caso de você passar uma instância FileInfo
:
Stream inputStream = .. . ; // TODO: Acquire the input data somehow
var job = await verifalia
. EmailValidations
. SubmitAsync ( inputStream ,
MediaTypeHeaderValue . Parse ( WellKnownMimeContentTypes . TextPlain ) ) ; // text/plain
Ao enviar um ou mais endereços de e-mail para verificação, é possível especificar diversas opções que afetam o comportamento do mecanismo de processamento da Verifalia, bem como o fluxo de verificação do ponto de vista do consumidor da API.
A Verifalia oferece três níveis de qualidade distintos - nomeadamente, Standard , High e Extreme - que excluem a forma como o motor de verificação de e-mail deve lidar com problemas temporários de impossibilidade de entrega, com trocadores de correio mais lentos e outros problemas potencialmente transitórios que podem afetar a qualidade dos resultados da verificação. As sobrecargas do método SubmitAsync()
aceitam um parâmetro quality
que permite especificar o nível de qualidade desejado; aqui está um exemplo que mostra como verificar um endereço de e-mail usando o nível de alta qualidade:
var job = await verifalia
. EmailValidations
. SubmitAsync ( "[email protected]" , quality : QualityLevelName . High ) ;
As sobrecargas do método SubmitAsync()
que aceitam vários endereços de e-mail ao mesmo tempo permitem especificar como lidar com entradas duplicadas pertencentes ao mesmo conjunto de entrada; A Verifalia suporta um modo de desduplicação seguro , que segue fortemente os antigos padrões IETF, e um modo relaxado , que está mais alinhado com o que pode ser encontrado na maioria das configurações atuais de trocadores de e-mail.
No próximo exemplo, mostramos como importar e verificar uma lista de endereços de e-mail e marcar entradas duplicadas usando o modo de desduplicação relaxado :
var job = await verifalia
. EmailValidations
. SubmitAsync ( new FileInfo ( "that-file.xslx" ) , deduplication : DeduplicationMode . Relaxed ) ;
A Verifalia exclui automaticamente os trabalhos de verificação de e-mail concluídos de acordo com a política de retenção de dados definida no nível da conta, que pode ser eventualmente substituída no nível do usuário: pode-se usar a área de clientes da Verifalia para definir essas configurações.
Também é possível especificar uma política de retenção de dados por trabalho que rege o tempo de vida de um trabalho de verificação de e-mail enviado; para fazer isso, use as sobrecargas do método SubmitAsync()
que aceita uma instância ValidationRequest
ou FileValidationRequest
e inicialize sua propriedade Retention
de acordo.
Veja como, por exemplo, é possível definir uma política de retenção de dados de 10 minutos durante a verificação de um endereço de e-mail:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new ValidationRequest ( new [ ]
{
"[email protected]"
} )
{
Retention = TimeSpan . FromMinutes ( 10 )
} ) ;
Por padrão, as sobrecargas do método SubmitAsync()
enviam um trabalho de verificação de e-mail para a Verifalia e aguardam sua conclusão; todo o processo pode levar algum tempo para ser concluído, dependendo do plano da conta Verifalia, do número de endereços de e-mail que o envio contém, do nível de qualidade especificado e de outros fatores de rede, incluindo a latência dos trocadores de e-mail em teste.
Ao aguardar a conclusão de um determinado trabalho de verificação de e-mail, a biblioteca pesquisa automaticamente a API Verifalia subjacente até que os resultados estejam prontos; por padrão, tenta aproveitar o modo de sondagem longa introduzido com a API Verifalia v2.4, que permite minimizar o número de solicitações e obter os resultados da verificação mais rapidamente.
Em certos cenários (em uma arquitetura de microsserviços, por exemplo), no entanto, pode ser preferível evitar a espera pela conclusão de um trabalho e solicitar à API da Verifalia, em vez disso, apenas que o coloque na fila: nesse caso, a biblioteca apenas retornaria o trabalho visão geral (e não seus resultados de verificação) e será necessário recuperar os resultados da verificação usando o método GetAsync()
.
Para fazer isso, é possível especificar WaitOptions.NoWait
como o valor do parâmetro waitOptions
das sobrecargas do método SubmitAsync()
, conforme mostrado no próximo exemplo:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new FileInfo ( "that-file.xslx" ) ,
waitOptions : WaitOptions . NoWait ) ;
Console . WriteLine ( $ "Status: { job . Overview . Status } " ) ;
// Status: InProgress
Para trabalhos com um grande número de endereços de e-mail, pode ser útil acompanhar o progresso à medida que são processados pelo mecanismo de verificação de e-mail da Verifalia; para isso, é possível criar uma instância da classe WaitOptions
e fornecer um manipulador que eventualmente receba notificações de progresso através da propriedade Progress
.
Veja como definir um manipulador de notificação de progresso que exibe a porcentagem de progresso de um trabalho enviado na janela do console:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new FileInfo ( "that-other-file.csv" ) ,
waitOptions : new WaitOptions
{
Progress = new Progress < ValidationOverview > ( overview =>
{
Console . WriteLine ( overview . Progress ? . Percentage ) ;
} )
} ) ;
Junto com cada trabalho de validação de e-mail, é possível especificar uma URL que a Verifalia invocará (POST) assim que o trabalho for concluído: esta URL deve usar o esquema HTTPS ou HTTP e ser acessível publicamente pela Internet. Para saber mais sobre retornos de chamada de conclusão, consulte https://verifalia.com/developers#email-validations-completion-callback
Para especificar um URL de retorno de chamada de conclusão, passe ValidationRequest
ou FileValidationRequest
para o método SubmitAsync()
e defina sua propriedade CompletionCallback
adequadamente, conforme mostrado no exemplo abaixo:
await verifalia
. EmailValidations
. SubmitAsync ( new ValidationRequest ( new [ ] { "[email protected]" } )
{
CompletionCallback = new CompletionCallback ( "https://your-website-here/foo/bar" )
} ) ;
Observe que os retornos de chamada de conclusão são invocados de forma assíncrona e pode levar vários segundos para que seu URL de retorno de chamada seja invocado.
É possível recuperar um job através dos métodos GetAsync()
e GetOverviewAsync()
, que retornam, respectivamente, uma instância Validation
ou uma instância ValidationOverview
para o job de verificação de e-mail desejado. Ao fazer isso, a biblioteca aguarda automaticamente a conclusão do trabalho, e é possível ajustar esse comportamento passando para os métodos mencionados um parâmetro waitOptions
, exatamente da mesma forma descrita para as sobrecargas do método SubmitAsync()
; consulte a seção Opções de espera para obter detalhes adicionais.
Aqui está um exemplo que mostra como recuperar um trabalho, dado o seu identificador:
var jobId = Guid . Parse ( "ec415ecd-0d0b-49c4-a5f0-f35c182e40ea" ) ;
var job = await verifalia . EmailValidations . GetAsync ( jobId ) ;
Esta biblioteca também permite exportar as entradas de um trabalho de validação de email concluído em diferentes formatos de saída através do método ExportEntriesAsync()
, com o objetivo de gerar uma representação legível dos resultados da verificação.
AVISO : embora o esquema de saída (colunas/rótulos/formato de dados) esteja bastante completo, você deve sempre considerá-lo sujeito a alterações: use os métodos
GetAsync()
/GetEntriesAsync()
se precisar contar com um esquema de saída estável.
Aqui está um exemplo que mostra como exportar um determinado trabalho de verificação de e-mail como um arquivo de valores separados por vírgula (CSV):
// Exports the validated entries for the job in the CSV format
var exportedStream = await verifalia
. EmailValidations
. ExportEntriesAsync ( new Guid ( "722c2fd8-8837-449f-ad24-0330c597c993" ) ,
ExportedEntriesFormat . Csv ) ;
// Creates the output file stream
var fileStream = new FileStream ( "my-list.csv" , FileMode . Create ) ;
// Copies the exported stream into the output file stream
await exportedStream . CopyToAsync ( fileStream ) ;
A Verifalia exclui automaticamente os trabalhos concluídos após uma política de retenção de dados configurável (veja a seção relacionada), mas é altamente recomendável que você exclua seus trabalhos concluídos o mais rápido possível, por razões de privacidade e segurança. Para fazer isso, você pode invocar o método DeleteAsync()
passando o ID do trabalho do qual deseja se livrar:
await verifalia
. EmailValidations
. DeleteAsync ( job . Id ) ;
Depois de excluído, um trabalho desaparece e não há como recuperar os resultados da validação de e-mail.
Para fins de gerenciamento e relatórios, você pode obter uma lista detalhada de seus trabalhos anteriores de validação de e-mail. Esta biblioteca SDK permite fazer isso através do método ListAsync()
, que permite iterar de forma assíncrona sobre uma coleção de instâncias ValidationOverview
(o mesmo tipo da propriedade Overview
dos resultados retornados por SubmitAsync()
e GetAsync()
).
Veja como iterar seus trabalhos, do mais recente ao mais antigo:
var jobOverviews = verifalia
. EmailValidations
. ListAsync ( new ValidationOverviewListingOptions
{
Direction = Direction . Backward
} ) ;
await foreach ( var jobOverview in jobOverviews )
{
Console . WriteLine ( "Id: {0}, status: {2}, entries: {3}" ,
jobOverview . Id ,
jobOverview . Status ,
jobOverview . NoOfEntries ) ;
}
// Prints out something like:
// Id: a7784f9a-86d4-436c-b8e4-f72f2bd377ac, status: InProgress, entries: 9886
// Id: 86d57c00-147a-4736-88cc-c918260c67c6, status: Completed, entries: 1
// Id: 594bbb0f-6f12-481c-926f-606cfefc1cd5, status: Completed, entries: 1
// Id: a5c1cd5b-39cc-43bc-9a3a-ee4a0f80ee6d, status: InProgress, entries: 226
// Id: b6f69e30-60dd-4c21-b2cb-e73ba75fb278, status: Completed, entries: 12077
// Id: 5e5a97dc-459f-4edf-a607-47371c32aa94, status: Deleted, entries: 1009
// ...
O método
ListAsync()
usa o recurso enumerável assíncrono do C# 8.0 ; para suporte a idiomas anteriores, verifique o grupo de métodosListSegmentedAsync()
.
O método ListAsync()
também tem a capacidade, através do mesmo argumento options
, de filtrar os trabalhos de verificação de e-mail retornados pela API Verifalia: é possível filtrar por data de envio, proprietário e status dos trabalhos.
Veja como repetir a operação de listagem mostrada no exemplo acima, desta vez retornando apenas as vagas de um determinado usuário e para um determinado intervalo de datas:
var jobOverviews = verifalia
. EmailValidations
. ListAsync ( new ValidationOverviewListingOptions
{
Direction = Direction . Backward ,
CreatedOn = new DateBetweenPredicate ( new DateTime ( 2024 , 1 , 3 ) ,
new DateTime ( 2024 , 1 , 7 ) ) ,
Owner = new StringEqualityPredicate ( "50173acd-9ed2-4298-ba7f-8ccaeed48deb" )
} ) ;
await foreach ( var jobOverview in jobOverviews )
{
// ...
}
Para gerenciar os créditos Verifalia para sua conta você pode usar a propriedade Credits
exposta pela instância VerifaliaRestClient
criada acima. Assim como no tópico anterior, nos próximos parágrafos veremos as operações mais utilizadas, por isso é altamente recomendável explorar a biblioteca e consultar a ajuda do xmldoc incorporado para outras oportunidades.
Uma das tarefas mais comuns que você pode precisar realizar em sua conta é recuperar o número disponível de créditos diários gratuitos e pacotes de créditos. Para fazer isso, você pode usar o método GetBalanceAsync()
, que retorna um objeto Balance
, conforme mostrado no próximo exemplo:
var balance = await verifalia
. Credits
. GetBalanceAsync ( ) ;
Console . WriteLine ( "Credit packs: {0}, free daily credits: {1} (will reset in {2})" ,
balance . CreditPacks ,
balance . FreeCredits ,
balance . FreeCreditsResetIn ) ;
// Prints out something like:
// Credit packs: 956.332, free daily credits: 128.66 (will reset in 09:08:23)
Para adicionar pacotes de crédito à sua conta Verifalia, visite https://verifalia.com/client-area#/credits/add.
Como forma de monitorar e prever o consumo de créditos da sua conta, o método ListDailyUsagesAsync()
permite recuperar estatísticas sobre o histórico de uso de créditos, retornando uma coleção iterável de forma assíncrona de instâncias DailyUsage
. O método também permite limitar o período de interesse passando uma instância DailyUsageListingOptions
. Os elementos são devolvidos apenas para as datas em que ocorreu o consumo (seja de créditos gratuitos, pacotes de créditos ou ambos).
Veja como recuperar o consumo diário de créditos dos últimos trinta dias:
var dailyUsages = verifalia
. Credits
. ListDailyUsagesAsync ( new DailyUsageListingOptions
{
DateFilter = new DateBetweenPredicate
{
Since = DateTime . Now . AddDays ( - 30 )
}
} ) ;
await foreach ( var dailyUsage in dailyUsages )
{
Console . WriteLine ( "{0:yyyyMMdd} - credit packs: {1}, free daily credits: {2}" ,
dailyUsage . Date ,
dailyUsage . CreditPacks ,
dailyUsage . FreeCredits ) ;
}
// Prints out something like:
// 20240201 - credit packs: 1965.68, free daily credits: 200
// 20240126 - credit packs: 0, free daily credits: 185.628
// 20240125 - credit packs: 15.32, free daily credits: 200
// ...
O método
ListDailyUsagesAsync()
usa o recurso enumerável assíncrono do C# 8.0 ; para suporte a idiomas anteriores, verifique o grupo de métodosListDailyUsagesSegmentedAsync()
.
Esta seção lista o changelog da versão principal atual da biblioteca: para versões mais antigas, consulte os lançamentos do projeto. Por uma questão de clareza, os logs para atualizações de compilação e revisão são excluídos.
Lançado em 11 de janeiro de 2024
Lançado em 26 de maio de 2023
ToAsyncEnumerableAsync()
que anteriormente resultava em listagens incompletas em cenários específicosLançado em 27 de fevereiro de 2023
WaitingStrategy
para WaitOptions
e refatorou o último para que agora permita ajustar os tempos de espera da pesquisa subjacentesWaitOptions
)CompletionCallback
das classes ValidationRequest
e FileValidationRequest
agora aponta para uma classe CompletionCallback
completa em vez de um Uri
simples