Verifalia proporciona una API sencilla basada en HTTPS para validar direcciones de correo electrónico en tiempo real y comprobar si se pueden entregar o no; Esta biblioteca SDK se integra con Verifalia y permite verificar direcciones de correo electrónico en las siguientes plataformas:
Para obtener más información sobre Verifalia, consulte https://verifalia.com
La mejor y más sencilla forma de agregar la biblioteca SDK de verificación de correo electrónico de Verifalia a su proyecto .NET es utilizar el administrador de paquetes NuGet.
Desde Visual Studio, puede utilizar la GUI de NuGet para buscar e instalar el paquete Verifalia NuGet. O, como acceso directo, simplemente escriba el siguiente comando en la Consola del Administrador de paquetes:
Install-Package Verifalia
Como forma alternativa de agregar el SDK de Verifalia a su solución .NET, puede descargar el proyecto fuente del SDK desde github, extraerlo a una carpeta de su elección y agregar una referencia de su propio proyecto al proyecto del SDK de Verifalia. El proyecto SDK es un proyecto C# al que se puede hacer referencia y usarse con cualquier otro lenguaje .NET también, incluido Visual Basic (VB.NET), C++/CLI, J#, IronPython, IronRuby, F# y PowerShell.
Más información en https://verifalia.com
Lo primero es lo primero: la autenticación en la API de Verifalia se realiza mediante las credenciales de su cuenta raíz de Verifalia o de uno de sus usuarios (anteriormente conocidos como subcuentas): si no tiene una cuenta de Verifalia, simplemente regístrese para uno gratis. Por razones de seguridad, siempre es recomendable crear y utilizar un usuario dedicado para acceder a la API, ya que al hacerlo le permitirá asignarle solo los permisos específicos necesarios.
Obtenga más información sobre la autenticación en la API de Verifalia en https://verifalia.com/developers#authentication
Una vez que tenga sus credenciales de Verifalia a mano, úselas mientras crea una nueva instancia del tipo VerifaliaRestClient
, que será el punto de partida para cualquier otra operación en la API de Verifalia: las credenciales proporcionadas se proporcionarán automáticamente a la API mediante HTTP básico. Método de autenticación.
using Verifalia . Api ;
var verifalia = new VerifaliaRestClient ( "username" , "password" ) ;
Además del método de autenticación básica HTTP, este SDK también admite otras formas diferentes de autenticarse en la API de Verifalia, como se explica en las secciones siguientes.
La autenticación de portador ofrece mayor seguridad que la autenticación básica HTTP, ya que esta última requiere enviar las credenciales reales en cada llamada API, mientras que la primera solo lo requiere en una primera solicitud de autenticación dedicada. Por otro lado, la primera solicitud de autenticación necesaria para la autenticación del portador lleva un tiempo nada despreciable: si necesita realizar una sola solicitud, el uso de HTTP Basic Auth proporciona el mismo grado de seguridad y también es más rápido.
using Verifalia . Api ;
using Verifalia . Api . Security ;
var verifalia = new VerifaliaRestClient ( new BearerAuthenticationProvider ( "username" , "password" ) ) ;
También es posible manejar la autenticación multifactor (MFA) definiendo una implementación personalizada de la interfaz ITotpTokenProvider
, que debe usarse para adquirir la contraseña de un solo uso basada en el tiempo desde una aplicación o dispositivo de autenticación externo: para agregar autenticación multifactor a su cuenta raíz de Verifalia, configure sus ajustes de seguridad.
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 autenticación utiliza un certificado de cliente criptográfico X.509 para autenticarse contra la API de Verifalia, a través del protocolo TLS. Este método, también llamado autenticación TLS mutua (mTLS) o autenticación bidireccional, ofrece el mayor grado de seguridad, ya que solo se envía por cable una clave derivada criptográficamente (y no las credenciales reales) en cada solicitud.
using Verifalia . Api ;
using Verifalia . Api . Security ;
var verifalia = new VerifaliaRestClient ( new X509Certificate2 ( "mycertificate.pem" ) ) ;
Cada operación relacionada con la verificación/validación de direcciones de correo electrónico se realiza a través de la propiedad EmailValidations
expuesta por la instancia VerifaliaRestClient
que creó anteriormente. La propiedad está repleta de métodos útiles, cada uno de los cuales tiene muchas sobrecargas: en los próximos párrafos veremos los más utilizados, por lo que es muy recomendable explorar la biblioteca y consultar la ayuda xmldoc incorporada para otras oportunidades.
La biblioteca espera automáticamente a que se completen los trabajos de verificación de correo electrónico : si es necesario, es posible ajustar las opciones de espera y tener más control sobre todo el proceso de sondeo subyacente. Consulte la sección Opciones de espera a continuación para obtener detalles adicionales.
Para validar una dirección de correo electrónico desde una aplicación .NET, puede invocar el método SubmitAsync()
: acepta una o más direcciones de correo electrónico y cualquier opción de verificación eventual que desee pasar a Verifalia, incluida la calidad de los resultados esperados, las preferencias de deduplicación y la prioridad de procesamiento.
Nota En caso de que necesite verificar una lista de direcciones de correo electrónico, es recomendable enviarlas todas a la vez a través de una de las sobrecargas del método
SubmitAsync()
dedicado (consulte las siguientes secciones), en lugar de iterar sobre el conjunto de fuentes y enviar el direcciones una por una. El método "todo a la vez" no sólo sería más rápido, sino que también permitiría detectar y marcar elementos duplicados, una característica que no está disponible al verificar las direcciones de correo electrónico una por una.
En el siguiente ejemplo, verificamos una dirección de correo electrónico con esta biblioteca, usando las opciones predeterminadas:
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 es de esperar, cada entrada puede incluir varios detalles adicionales sobre la dirección de correo electrónico verificada:
Propiedad | Descripción |
---|---|
AsciiEmailAddressDomainPart | Obtiene la parte del dominio de la dirección de correo electrónico, convertida a ASCII si es necesario y sin comentarios ni espacios en blanco plegables. |
Classification | El valor ValidationEntryClassification para esta entrada. |
CompletedOn | La fecha en que se completó esta entrada, si está disponible. |
Custom | Una cadena personalizada y opcional que se devuelve al completar la validación. Para pasar un valor personalizado de un lado a otro, utilice la propiedad Custom de ValidationRequestEntry . |
DuplicateOf | El índice de base cero de la primera aparición de esta dirección de correo electrónico en la Validation principal, en caso de que el Status de esta entrada sea Duplicate ; Los elementos duplicados no exponen ningún detalle del resultado aparte de este y los valores Custom eventuales. |
Index | El índice de esta entrada dentro de su contenedor Validation ; Esta propiedad es especialmente útil en caso de que la API devuelva una vista filtrada de los elementos. |
InputData | La cadena de entrada que se está validando. |
EmailAddress | Obtiene la dirección de correo electrónico, sin ningún comentario eventual ni espacios en blanco plegables. Devuelve nulo si los datos de entrada no son una dirección de correo electrónico sintácticamente no válida. |
EmailAddressDomainPart | Obtiene la parte del dominio de la dirección de correo electrónico, sin comentarios ni espacios en blanco plegables. |
EmailAddressLocalPart | Obtiene la parte local de la dirección de correo electrónico, sin comentarios ni espacios en blanco plegables. |
HasInternationalDomainName | Si es verdadero, la dirección de correo electrónico tiene un nombre de dominio internacional. |
HasInternationalMailboxName | Si es verdadero, la dirección de correo electrónico tiene un nombre de buzón internacional. |
IsDisposableEmailAddress | Si es verdadero, la dirección de correo electrónico proviene de un proveedor de direcciones de correo electrónico desechables (DEA). ¿Qué es una dirección de correo electrónico desechable? |
IsFreeEmailAddress | Si es verdadero, la dirección de correo electrónico proviene de un proveedor de direcciones de correo electrónico gratuito (por ejemplo, gmail, yahoo, outlook/hotmail,...). |
IsRoleAccount | Si es verdadero, la parte local de la dirección de correo electrónico es una cuenta de función conocida. |
Status | El valor ValidationEntryStatus para esta entrada. |
Suggestions | Las posibles correcciones de los datos de entrada, en caso de que Verifalia identificara posibles errores tipográficos durante el proceso de verificación. |
SyntaxFailureIndex | La posición del carácter en la dirección de correo electrónico que finalmente provocó que fallara la validación de sintaxis. |
Aquí hay otro ejemplo, que muestra algunos de los detalles de resultados adicionales proporcionados por 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 una lista de direcciones de correo electrónico, en lugar de una sola dirección, es posible utilizar la sobrecarga del método SubmitAsync()
que acepta un IEnumerable<string>
; Si las direcciones de correo electrónico que se van a verificar están almacenadas originalmente en un archivo, también es posible simplemente cargar el archivo y hacer que Verifalia lo importe y verifique automáticamente; consulte la siguiente sección para obtener más detalles.
A continuación se muestra un ejemplo que muestra cómo verificar una matriz con algunas direcciones de correo electrónico:
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 incluye soporte para enviar y validar archivos con direcciones de correo electrónico, que incluyen:
Para enviar y validar archivos, aún se puede usar el método SubmitAsync()
mencionado anteriormente, pasando una instancia Stream
o FileInfo
o simplemente un byte[]
con el contenido del archivo. Además de eso, también es posible especificar las filas iniciales y finales a procesar, la columna, el índice de la hoja, el final de la línea y el delimitador, dependiendo, por supuesto, de la naturaleza del archivo enviado (consulte FileValidationRequest
en el código fuente para aprender más).
A continuación se explica cómo enviar y verificar un archivo de Excel, por ejemplo:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new FileInfo ( "that-file.xslx" ) ) ;
Para opciones más avanzadas, simplemente pase la instancia FileValidationRequest
al 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 ) ;
Y aquí hay otro ejemplo, que muestra cómo enviar una instancia Stream
y especificando el tipo de contenido MIME del archivo, que se determina automáticamente a partir de la extensión del archivo en caso de que pase una instancia FileInfo
:
Stream inputStream = .. . ; // TODO: Acquire the input data somehow
var job = await verifalia
. EmailValidations
. SubmitAsync ( inputStream ,
MediaTypeHeaderValue . Parse ( WellKnownMimeContentTypes . TextPlain ) ) ; // text/plain
Al enviar una o más direcciones de correo electrónico para verificación, es posible especificar varias opciones que afectan el comportamiento del motor de procesamiento de Verifalia, así como el flujo de verificación desde el punto de vista del consumidor de API.
Verifalia ofrece tres niveles de calidad distintos, a saber, Estándar , Alto y Extremo , que descartan cómo el motor de verificación de correo electrónico debe lidiar con problemas temporales de imposibilidad de entrega, con intercambiadores de correo más lentos y otros problemas potencialmente transitorios que pueden afectar la calidad de los resultados de la verificación. Las sobrecargas del método SubmitAsync()
aceptan un parámetro quality
que permite especificar el nivel de calidad deseado; Aquí hay un ejemplo que muestra cómo verificar una dirección de correo electrónico usando el nivel de alta calidad:
var job = await verifalia
. EmailValidations
. SubmitAsync ( "[email protected]" , quality : QualityLevelName . High ) ;
Las sobrecargas del método SubmitAsync()
al aceptar múltiples direcciones de correo electrónico a la vez permiten especificar cómo tratar con entradas duplicadas pertenecientes al mismo conjunto de entrada; Verifalia admite un modo de deduplicación segura , que se adhiere firmemente a los antiguos estándares IETF, y un modo relajado que está más en línea con lo que se puede encontrar en la mayoría de las configuraciones de los intercambiadores de correo actuales.
En el siguiente ejemplo, mostramos cómo importar y verificar una lista de direcciones de correo electrónico y marcar entradas duplicadas usando el modo de deduplicación relajada :
var job = await verifalia
. EmailValidations
. SubmitAsync ( new FileInfo ( "that-file.xslx" ) , deduplication : DeduplicationMode . Relaxed ) ;
Verifalia elimina automáticamente los trabajos de verificación de correo electrónico completados de acuerdo con la política de retención de datos definida a nivel de cuenta, que eventualmente puede anularse a nivel de usuario: se puede usar el área de clientes de Verifalia para configurar estos ajustes.
También es posible especificar una política de retención de datos por trabajo que rija el tiempo de vida de un trabajo de verificación de correo electrónico enviado; para hacer eso, use las sobrecargas del método SubmitAsync()
que acepta una instancia ValidationRequest
o FileValidationRequest
e inicializa su propiedad Retention
en consecuencia.
Así es como, por ejemplo, se puede establecer una política de retención de datos de 10 minutos mientras se verifica una dirección de correo electrónico:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new ValidationRequest ( new [ ]
{
"[email protected]"
} )
{
Retention = TimeSpan . FromMinutes ( 10 )
} ) ;
De forma predeterminada, las sobrecargas del método SubmitAsync()
envían un trabajo de verificación de correo electrónico a Verifalia y esperan a que se complete; Es posible que todo el proceso requiera algún tiempo para completarse dependiendo del plan de la cuenta de Verifalia, la cantidad de direcciones de correo electrónico que contiene el envío, el nivel de calidad especificado y otros factores de la red, incluida la latencia de los intercambiadores de correo bajo prueba.
Mientras espera que se complete un trabajo de verificación de correo electrónico determinado, la biblioteca sondea automáticamente la API de Verifalia subyacente hasta que los resultados estén listos; De forma predeterminada, intenta aprovechar el modo de sondeo largo introducido con la API de Verifalia v2.4, que permite minimizar la cantidad de solicitudes y obtener los resultados de la verificación más rápido.
Sin embargo, en ciertos escenarios (en una arquitectura de microservicio, por ejemplo), puede ser preferible evitar esperar a que se complete un trabajo y, en su lugar, pedirle a la API de Verifalia que simplemente lo ponga en cola: en ese caso, la biblioteca simplemente devolvería el trabajo. descripción general (y no sus resultados de verificación) y será necesario recuperar los resultados de la verificación utilizando el método GetAsync()
.
Para hacer eso, es posible especificar WaitOptions.NoWait
como el valor para el parámetro waitOptions
de las sobrecargas del método SubmitAsync()
, como se muestra en el siguiente ejemplo:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new FileInfo ( "that-file.xslx" ) ,
waitOptions : WaitOptions . NoWait ) ;
Console . WriteLine ( $ "Status: { job . Overview . Status } " ) ;
// Status: InProgress
Para trabajos con una gran cantidad de direcciones de correo electrónico, podría resultar útil realizar un seguimiento del progreso a medida que el motor de verificación de correo electrónico de Verifalia los procesa; para hacer eso, es posible crear una instancia de la clase WaitOptions
y proporcionar un controlador que eventualmente reciba notificaciones de progreso a través de la propiedad Progress
.
A continuación se explica cómo definir un controlador de notificación de progreso que muestra el porcentaje de progreso de un trabajo enviado en la ventana de la consola:
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 con cada trabajo de validación de correo electrónico, es posible especificar una URL que Verifalia invocará (POST) una vez que se complete el trabajo: esta URL debe utilizar el esquema HTTPS o HTTP y ser accesible públicamente a través de Internet. Para obtener más información sobre las devoluciones de llamada de finalización, consulte https://verifalia.com/developers#email-validations-completion-callback
Para especificar una URL de devolución de llamada de finalización, pase ValidationRequest
o FileValidationRequest
al método SubmitAsync()
y establezca su propiedad CompletionCallback
en consecuencia, como se muestra en el siguiente ejemplo:
await verifalia
. EmailValidations
. SubmitAsync ( new ValidationRequest ( new [ ] { "[email protected]" } )
{
CompletionCallback = new CompletionCallback ( "https://your-website-here/foo/bar" )
} ) ;
Tenga en cuenta que las devoluciones de llamada de finalización se invocan de forma asincrónica y la URL de devolución de llamada podría tardar varios segundos en invocarse.
Es posible recuperar un trabajo mediante los métodos GetAsync()
y GetOverviewAsync()
, que devuelven, respectivamente, una instancia Validation
o una instancia ValidationOverview
para el trabajo de verificación de correo electrónico deseado. Mientras hace eso, la biblioteca espera automáticamente a que se complete el trabajo, y es posible ajustar este comportamiento pasando a los métodos antes mencionados un parámetro waitOptions
, exactamente de la misma manera que se describe para las sobrecargas del método SubmitAsync()
; consulte la sección Opciones de espera para obtener detalles adicionales.
A continuación se muestra un ejemplo que muestra cómo recuperar un trabajo, dado su identificador:
var jobId = Guid . Parse ( "ec415ecd-0d0b-49c4-a5f0-f35c182e40ea" ) ;
var job = await verifalia . EmailValidations . GetAsync ( jobId ) ;
Esta biblioteca también permite exportar las entradas de un trabajo de validación de correo electrónico completado en diferentes formatos de salida a través del método ExportEntriesAsync()
, con el objetivo de generar una representación legible por humanos de los resultados de la verificación.
ADVERTENCIA : Si bien el esquema de salida (columnas/etiquetas/formato de datos) es bastante completo, siempre debe considerarlo sujeto a cambios: use los métodos
GetAsync()
/GetEntriesAsync()
en su lugar si necesita confiar en un esquema de salida estable.
A continuación se muestra un ejemplo que muestra cómo exportar un trabajo de verificación de correo electrónico determinado como un archivo de valores separados por comas (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 ) ;
Verifalia elimina automáticamente los trabajos completados después de una política de retención de datos configurable (consulte la sección relacionada), pero es muy recomendable que elimine los trabajos completados lo antes posible, por razones de privacidad y seguridad. Para hacer eso, puedes invocar el método DeleteAsync()
pasando el ID del trabajo del que deseas deshacerte:
await verifalia
. EmailValidations
. DeleteAsync ( job . Id ) ;
Una vez eliminado, un trabajo desaparece y no hay forma de recuperar los resultados de la validación del correo electrónico.
Para fines de gestión y presentación de informes, es posible que desee obtener una lista detallada de sus trabajos anteriores de validación de correo electrónico. Esta biblioteca SDK permite hacerlo a través del método ListAsync()
, que permite iterar de forma asincrónica sobre una colección de instancias ValidationOverview
(el mismo tipo de propiedad Overview
de los resultados devueltos por SubmitAsync()
y GetAsync()
).
A continuación se explica cómo iterar sobre sus trabajos, desde el más reciente hasta el más antiguo:
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
// ...
El método
ListAsync()
utiliza la característica enumerable asíncrona de C# 8.0 ; Para compatibilidad con idiomas anteriores, consulte el grupo de métodosListSegmentedAsync()
.
El método ListAsync()
también tiene la capacidad, mediante el mismo argumento options
, de filtrar los trabajos de verificación de correo electrónico devueltos por la API de Verifalia: es posible filtrar por fecha de envío, propietario y estado de los trabajos.
A continuación se explica cómo repetir la operación de listado que se muestra en el ejemplo anterior, esta vez devolviendo solo los trabajos de un usuario determinado y para un rango de fechas determinado:
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 administrar los créditos de Verifalia para su cuenta, puede utilizar la propiedad Credits
expuesta por la instancia VerifaliaRestClient
creada anteriormente. Al igual que en el tema anterior, en los siguientes párrafos veremos las operaciones más utilizadas, por lo que es muy recomendable explorar la biblioteca y consultar la ayuda xmldoc integrada para conocer otras oportunidades.
Una de las tareas más comunes que quizás deba realizar en su cuenta es recuperar la cantidad disponible de créditos diarios y paquetes de créditos gratuitos. Para hacerlo, puede utilizar el método GetBalanceAsync()
, que devuelve un objeto Balance
, como se muestra en el siguiente ejemplo:
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 agregar paquetes de crédito a su cuenta Verifalia, visite https://verifalia.com/client-area#/credits/add.
Como una forma de monitorear y pronosticar el consumo de créditos de su cuenta, el método ListDailyUsagesAsync()
permite recuperar estadísticas sobre el uso histórico de créditos, devolviendo una colección asincrónicamente iterable de instancias de DailyUsage
. El método también permite limitar el período de interés pasando una instancia de DailyUsageListingOptions
. Los elementos se devuelven solo para las fechas en las que se produjo el consumo (ya sea de créditos gratuitos, paquetes de créditos o ambos).
A continuación se explica cómo recuperar el consumo de créditos diarios de los últimos treinta días:
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
// ...
El método
ListDailyUsagesAsync()
utiliza la característica enumerable asíncrona de C# 8.0 ; para compatibilidad con idiomas anteriores, consulte el grupo de métodosListDailyUsagesSegmentedAsync()
.
Esta sección enumera el registro de cambios de la versión principal actual de la biblioteca: para versiones anteriores, consulte las versiones del proyecto. En aras de la claridad, se excluyen los registros de actualizaciones de compilación y revisión.
Publicado el 11 de enero de 2024.
Publicado el 26 de mayo de 2023.
ToAsyncEnumerableAsync()
que anteriormente generaba listados incompletos en escenarios específicos.Publicado el 27 de febrero de 2023.
WaitingStrategy
a WaitOptions
y se refactorizó este último para que ahora permita ajustar los tiempos de espera de sondeo subyacentes.WaitOptions
)CompletionCallback
de las clases ValidationRequest
y FileValidationRequest
ahora apunta a una clase CompletionCallback
completa en lugar de un simple Uri