Verifalia предоставляет простой API на основе HTTPS для проверки адресов электронной почты в режиме реального времени и проверки их доставки или нет; эта библиотека SDK интегрируется с Verifalia и позволяет проверять адреса электронной почты на следующих платформах:
Чтобы узнать больше о Verifalia, посетите https://verifalia.com.
Самый лучший и простой способ добавить библиотеку SDK проверки электронной почты Verifalia в ваш проект .NET — использовать диспетчер пакетов NuGet.
Из Visual Studio вы можете использовать графический интерфейс NuGet для поиска и установки пакета Verifalia NuGet. Или, в качестве ярлыка, просто введите следующую команду в консоль диспетчера пакетов:
Install-Package Verifalia
В качестве альтернативного способа добавить Verifalia SDK в ваше решение .NET вы можете загрузить исходный проект SDK с github, извлечь его в выбранную вами папку и добавить ссылку из своего собственного проекта в проект Verifalia SDK. Проект SDK — это проект C#, на который можно ссылаться и использовать с любым другим языком .NET, включая Visual Basic (VB.NET), C++/CLI, J#, IronPython, IronRuby, F# и PowerShell.
Узнайте больше на https://verifalia.com.
Перво-наперво: аутентификация для API Verifalia выполняется либо с использованием учетных данных вашей корневой учетной записи Verifalia, либо одного из ее пользователей (ранее известных как субаккаунты): если у вас нет учетной записи Verifalia, просто зарегистрируйтесь бесплатный. По соображениям безопасности всегда рекомендуется создавать и использовать выделенного пользователя для доступа к API, поскольку это позволит назначить ему только определенные необходимые разрешения.
Узнайте больше об аутентификации в API Verifalia на странице https://verifalia.com/developers#authentication.
Получив учетные данные Verifalia, используйте их при создании нового экземпляра типа VerifaliaRestClient
, который станет отправной точкой для всех остальных операций с API Verifalia: предоставленные учетные данные будут автоматически предоставлены API с помощью HTTP Basic. Метод авторизации.
using Verifalia . Api ;
var verifalia = new VerifaliaRestClient ( "username" , "password" ) ;
В дополнение к методу базовой аутентификации HTTP этот SDK также поддерживает другие способы аутентификации в API Verifalia, как описано в последующих разделах.
Аутентификация на предъявителя обеспечивает более высокий уровень безопасности по сравнению с базовой аутентификацией HTTP, поскольку последняя требует отправки фактических учетных данных при каждом вызове API, а первая требует их только при первом выделенном запросе аутентификации. С другой стороны, первый запрос аутентификации, необходимый для аутентификации на предъявителя, занимает немалое время: если вам нужно выполнить только один запрос, использование HTTP Basic Auth обеспечивает ту же степень безопасности, но также быстрее.
using Verifalia . Api ;
using Verifalia . Api . Security ;
var verifalia = new VerifaliaRestClient ( new BearerAuthenticationProvider ( "username" , "password" ) ) ;
Обработка многофакторной аутентификации (MFA) также возможна путем определения пользовательской реализации интерфейса ITotpTokenProvider
, который следует использовать для получения одноразового пароля на основе времени из внешнего приложения или устройства для проверки подлинности: для добавления многофакторной аутентификации в корневой учетной записи Verifalia, настройте параметры безопасности.
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 ( ) ) ) ;
Этот метод аутентификации использует криптографический сертификат клиента X.509 для аутентификации через API Verifalia через протокол TLS. Этот метод, также называемый взаимной аутентификацией TLS (mTLS) или двусторонней аутентификацией, обеспечивает высочайшую степень безопасности, поскольку при каждом запросе по сети передается только криптографически полученный ключ (а не фактические учетные данные).
using Verifalia . Api ;
using Verifalia . Api . Security ;
var verifalia = new VerifaliaRestClient ( new X509Certificate2 ( "mycertificate.pem" ) ) ;
Каждая операция, связанная с проверкой/проверкой адресов электронной почты, выполняется через свойство EmailValidations
предоставляемое экземпляром VerifaliaRestClient
, который вы создали выше. Свойство наполнено полезными методами, каждый из которых имеет множество перегрузок: в следующих нескольких абзацах мы рассмотрим наиболее используемые из них, поэтому настоятельно рекомендуется изучить библиотеку и просмотреть встроенную справку по xmldoc на предмет других возможностей.
Библиотека автоматически ожидает завершения заданий проверки электронной почты : при необходимости можно настроить параметры ожидания и получить больший контроль над всем базовым процессом опроса. Дополнительную информацию см. в разделе «Параметры ожидания» ниже.
Чтобы проверить адрес электронной почты из приложения .NET, вы можете вызвать метод SubmitAsync()
: он принимает один или несколько адресов электронной почты и любые возможные параметры проверки, которые вы хотите передать в Verifalia, включая ожидаемое качество результатов, настройки дедупликации, приоритет обработки.
Примечание. Если вам необходимо проверить список адресов электронной почты, рекомендуется отправить их все сразу с помощью одной из специальных перегрузок метода
SubmitAsync()
(см. следующие разделы), вместо того, чтобы перебирать исходный набор и отправлять адреса один за другим. Мало того, что метод «все сразу» будет быстрее, он также позволит обнаруживать и отмечать дубликаты элементов — функция, которая недоступна при проверке адресов электронной почты один за другим.
В следующем примере мы проверяем адрес электронной почты с помощью этой библиотеки, используя параметры по умолчанию:
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)
Как и следовало ожидать, каждая запись может включать различную дополнительную информацию о подтвержденном адресе электронной почты:
Свойство | Описание |
---|---|
AsciiEmailAddressDomainPart | Получает доменную часть адреса электронной почты, при необходимости преобразуемую в ASCII, с удаленными комментариями и пробелами. |
Classification | Значение ValidationEntryClassification для этой записи. |
CompletedOn | Дата завершения записи, если таковая имеется. |
Custom | Пользовательская необязательная строка, которая передается обратно после завершения проверки. Чтобы передавать туда и обратно пользовательское значение, используйте свойство Custom ValidationRequestEntry . |
DuplicateOf | Отсчитываемый от нуля индекс первого появления этого адреса электронной почты в родительской Validation в случае, если Status этой записи — Duplicate ; дублированные элементы не раскрывают никаких подробностей результата, кроме этих и возможных Custom значений. |
Index | Индекс этой записи в контейнере Validation ; это свойство наиболее полезно в том случае, если API возвращает отфильтрованное представление элементов. |
InputData | Входная строка проверяется. |
EmailAddress | Получает адрес электронной почты без каких-либо комментариев или складных пробелов. Возвращает значение NULL, если входные данные не являются синтаксически недопустимым адресом электронной почты. |
EmailAddressDomainPart | Получает доменную часть адреса электронной почты без комментариев и пробелов. |
EmailAddressLocalPart | Получает локальную часть адреса электронной почты без комментариев и пробелов. |
HasInternationalDomainName | Если это правда, адрес электронной почты имеет международное доменное имя. |
HasInternationalMailboxName | Если это правда, адрес электронной почты имеет международное имя почтового ящика. |
IsDisposableEmailAddress | Если это правда, адрес электронной почты поступает от поставщика одноразовых адресов электронной почты (DEA). Что такое одноразовый адрес электронной почты? |
IsFreeEmailAddress | Если это правда, адрес электронной почты исходит от поставщика бесплатных адресов электронной почты (например, Gmail, Yahoo, Outlook / Hotmail, ...). |
IsRoleAccount | Если это правда, локальная часть адреса электронной почты является учетной записью известной роли. |
Status | Значение ValidationEntryStatus для этой записи. |
Suggestions | Возможные исправления входных данных на случай, если Verifalia обнаружит возможные опечатки в процессе проверки. |
SyntaxFailureIndex | Позиция символа в адресе электронной почты, которая в конечном итоге привела к сбою проверки синтаксиса. |
Вот еще один пример, показывающий некоторые дополнительные сведения о результатах, предоставленные 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]
Чтобы проверить список адресов электронной почты вместо одного адреса, можно использовать перегрузку метода SubmitAsync()
, которая принимает IEnumerable<string>
; Если адреса электронной почты, подлежащие проверке, изначально хранятся в файле, можно также просто загрузить файл, чтобы Verifalia автоматически импортировала и проверила его — подробности см. в следующем разделе.
Вот пример, показывающий, как проверить массив с некоторыми адресами электронной почты:
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)
Эта библиотека включает поддержку отправки и проверки файлов с адресами электронной почты, в том числе:
Для отправки и проверки файлов по-прежнему можно использовать упомянутый выше метод SubmitAsync()
, передавая либо экземпляр Stream
, либо экземпляр FileInfo
, либо просто byte[]
с содержимым файла. Наряду с этим также можно указать конечные начальную и конечную строки для обработки, столбец, индекс листа, конец строки и разделитель - в зависимости, конечно, от характера отправленного файла (см. FileValidationRequest
в источнике для узнать больше).
Вот как можно отправить и проверить файл Excel, например:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new FileInfo ( "that-file.xslx" ) ) ;
Для получения более расширенных возможностей просто передайте экземпляр FileValidationRequest
методу SubmitAsync()
:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new FileValidationRequest ( new FileInfo ( "that-file.xslx" ) )
{
Sheet = 3 ,
StartingRow = 1 ,
Column = 5
} ,
quality : QualityLevelName . High ) ;
А вот еще один пример, показывающий, как отправить экземпляр Stream
и указать тип содержимого MIME файла, который автоматически определяется по расширению файла в случае передачи экземпляра FileInfo
:
Stream inputStream = .. . ; // TODO: Acquire the input data somehow
var job = await verifalia
. EmailValidations
. SubmitAsync ( inputStream ,
MediaTypeHeaderValue . Parse ( WellKnownMimeContentTypes . TextPlain ) ) ; // text/plain
Отправляя один или несколько адресов электронной почты для проверки, можно указать несколько параметров, которые влияют на поведение механизма обработки Verifalia, а также на процесс проверки с точки зрения потребителя API.
Verifalia предлагает три различных уровня качества, а именно: «Стандартный» , «Высокий» и «Экстремальный », которые исключают, как механизм проверки электронной почты должен справляться с временными проблемами невозможности доставки, с более медленными почтовыми обменниками и другими потенциально временными проблемами, которые могут повлиять на качество результатов проверки. Перегрузки метода SubmitAsync()
принимают параметр quality
, который позволяет указать желаемый уровень качества; вот пример, показывающий, как подтвердить адрес электронной почты с использованием высокого уровня качества:
var job = await verifalia
. EmailValidations
. SubmitAsync ( "[email protected]" , quality : QualityLevelName . High ) ;
Перегрузки метода SubmitAsync()
, принимающие несколько адресов электронной почты одновременно, позволяют указать, как поступать с повторяющимися записями, относящимися к одному и тому же набору входных данных; Verifalia поддерживает безопасный режим дедупликации, который строго соответствует старым стандартам IETF, и расслабленный режим, который больше соответствует тому, что можно найти в большинстве современных конфигураций почтовых обменников.
В следующем примере мы покажем, как импортировать и проверить список адресов электронной почты и пометить повторяющиеся записи, используя режим смягченной дедупликации:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new FileInfo ( "that-file.xslx" ) , deduplication : DeduplicationMode . Relaxed ) ;
Verifalia автоматически удаляет завершенные задания проверки электронной почты в соответствии с политикой хранения данных, определенной на уровне учетной записи, которую в конечном итоге можно переопределить на уровне пользователя: для настройки этих параметров можно использовать область клиентов Verifalia.
Также можно указать политику хранения данных для каждого задания, которая определяет время жизни отправленного задания на проверку электронной почты; для этого используйте перегрузки метода SubmitAsync()
, которые либо принимают экземпляр ValidationRequest
, либо экземпляр FileValidationRequest
и соответствующим образом инициализируют его свойство Retention
.
Вот как, например, можно установить политику хранения данных в течение 10 минут при проверке адреса электронной почты:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new ValidationRequest ( new [ ]
{
"[email protected]"
} )
{
Retention = TimeSpan . FromMinutes ( 10 )
} ) ;
По умолчанию перегрузки метода SubmitAsync()
отправляют задание проверки электронной почты в Verifalia и ждут его завершения; Весь процесс может занять некоторое время в зависимости от плана учетной записи Verifalia, количества адресов электронной почты, содержащихся в отправке, указанного уровня качества и других сетевых факторов, включая задержку тестируемых почтовых обменников.
В ожидании завершения определенного задания по проверке электронной почты библиотека автоматически опрашивает базовый API Verifalia, пока результаты не будут готовы; по умолчанию он пытается воспользоваться режимом длительного опроса, представленным в Verifalia API v2.4, который позволяет минимизировать количество запросов и быстрее получать результаты проверки.
Однако в некоторых сценариях (например, в микросервисной архитектуре) может быть предпочтительнее не ждать завершения задания и вместо этого попросить Verifalia API просто поставить его в очередь: в этом случае библиотека просто вернет задание. обзор (а не результаты его проверки), и необходимо будет получить результаты проверки с помощью метода GetAsync()
.
Для этого можно указать WaitOptions.NoWait
в качестве значения параметра waitOptions
перегрузок метода SubmitAsync()
, как показано в следующем примере:
var job = await verifalia
. EmailValidations
. SubmitAsync ( new FileInfo ( "that-file.xslx" ) ,
waitOptions : WaitOptions . NoWait ) ;
Console . WriteLine ( $ "Status: { job . Overview . Status } " ) ;
// Status: InProgress
Для заданий с большим количеством адресов электронной почты может быть полезно отслеживать ход их обработки механизмом проверки электронной почты Verifalia; для этого можно создать экземпляр класса WaitOptions
и предоставить обработчик, который в конечном итоге будет получать уведомления о ходе выполнения через свойство Progress
.
Вот как определить обработчик уведомлений о ходе выполнения, который отображает процент выполнения отправленного задания в окне консоли:
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 ) ;
} )
} ) ;
Наряду с каждым заданием проверки электронной почты можно указать URL-адрес, который Verifalia будет вызывать (POST) после завершения задания: этот URL-адрес должен использовать схему HTTPS или HTTP и быть общедоступным через Интернет. Чтобы узнать больше об обратных вызовах завершения, см. https://verifalia.com/developers#email-validations-completion-callback.
Чтобы указать URL-адрес обратного вызова завершения, передайте ValidationRequest
или FileValidationRequest
методу SubmitAsync()
и соответствующим образом установите его свойство CompletionCallback
, как показано в примере ниже:
await verifalia
. EmailValidations
. SubmitAsync ( new ValidationRequest ( new [ ] { "[email protected]" } )
{
CompletionCallback = new CompletionCallback ( "https://your-website-here/foo/bar" )
} ) ;
Обратите внимание, что обратные вызовы завершения вызываются асинхронно, и вызов URL-адреса обратного вызова может занять до нескольких секунд.
Получить задание можно с помощью методов GetAsync()
и GetOverviewAsync()
, которые возвращают соответственно экземпляр Validation
или экземпляр ValidationOverview
для нужного задания проверки электронной почты. При этом библиотека автоматически ожидает завершения задания, и это поведение можно настроить, передав вышеупомянутым методам параметр waitOptions
точно так же, как описано для перегрузок метода SubmitAsync()
; дополнительную информацию см. в разделе «Параметры ожидания».
Вот пример, показывающий, как получить задание по его идентификатору:
var jobId = Guid . Parse ( "ec415ecd-0d0b-49c4-a5f0-f35c182e40ea" ) ;
var job = await verifalia . EmailValidations . GetAsync ( jobId ) ;
Эта библиотека также позволяет экспортировать записи завершенного задания проверки электронной почты в различные выходные форматы с помощью метода ExportEntriesAsync()
с целью создания удобочитаемого представления результатов проверки.
ВНИМАНИЕ : Хотя схема вывода (столбцы/метки/формат данных) достаточно полная, всегда следует учитывать, что она может быть изменена: вместо этого используйте методы
GetAsync()
/GetEntriesAsync()
если вам нужно полагаться на стабильную схему вывода.
Ниже приведен пример, показывающий, как экспортировать заданное задание проверки электронной почты в виде файла со значениями, разделенными запятыми (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 автоматически удаляет завершенные задания после настраиваемой политики хранения данных (см. соответствующий раздел), но настоятельно рекомендуется удалять выполненные задания как можно скорее из соображений конфиденциальности и безопасности. Для этого вы можете вызвать метод DeleteAsync()
передав идентификатор задания, от которого вы хотите избавиться:
await verifalia
. EmailValidations
. DeleteAsync ( job . Id ) ;
После удаления задание исчезает, и невозможно получить результаты проверки его электронной почты.
В целях управления и отчетности вам может потребоваться получить подробный список ваших прошлых заданий по проверке электронной почты. Эта библиотека SDK позволяет сделать это с помощью метода ListAsync()
, который позволяет асинхронно выполнять итерацию по коллекции экземпляров ValidationOverview
(того же типа, что и свойство Overview
результатов, возвращаемых SubmitAsync()
и GetAsync()
).
Вот как можно перебирать ваши задания, от самого последнего до самого старого:
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
// ...
Метод
ListAsync()
использует асинхронную перечисляемую функцию C# 8.0 ; для поддержки предыдущих языков проверьте группу методовListSegmentedAsync()
.
Метод ListAsync()
также имеет возможность с помощью того же аргумента options
фильтровать задания проверки электронной почты, возвращаемые API Verifalia: можно фильтровать по дате отправки, владельцу и статусу заданий.
Вот как повторить операцию листинга, показанную в примере выше, на этот раз возвращая только вакансии данного пользователя и для заданного диапазона дат:
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 )
{
// ...
}
Для управления кредитами Verifalia для вашей учетной записи вы можете использовать свойство Credits
, предоставляемое экземпляром VerifaliaRestClient
созданным выше. Как и в предыдущей теме, в следующих нескольких параграфах мы рассмотрим наиболее часто используемые операции, поэтому настоятельно рекомендуется изучить библиотеку и просмотреть встроенную справку xmldoc на предмет других возможностей.
Одна из наиболее распространенных задач, которые вам, возможно, придется выполнить в своей учетной записи, — это получение доступного количества бесплатных ежедневных кредитов и пакетов кредитов. Для этого вы можете использовать метод GetBalanceAsync()
, который возвращает объект Balance
, как показано в следующем примере:
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)
Чтобы добавить пакеты кредитов в свою учетную запись Verifalia, посетите https://verifalia.com/client-area#/credits/add.
В качестве способа мониторинга и прогнозирования потребления кредитов для вашей учетной записи метод ListDailyUsagesAsync()
позволяет получать статистику об историческом использовании кредитов, возвращая асинхронно повторяемую коллекцию экземпляров DailyUsage
. Метод также позволяет ограничить интересующий период, передав экземпляр DailyUsageListingOptions
. Элементы возвращаются только за те даты, когда произошло потребление (бесплатных кредитов, пакетов кредитов или того и другого).
Вот как получить ежедневное потребление кредитов за последние тридцать дней:
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
// ...
Метод
ListDailyUsagesAsync()
использует асинхронную перечисляемую функцию C# 8.0 ; для поддержки предыдущих языков проверьте группу методовListDailyUsagesSegmentedAsync()
.
В этом разделе приведен журнал изменений для текущей основной версии библиотеки: более старые версии см. в выпусках проекта. Для ясности журналы обновлений сборок и версий исключены.
Выпущено 11 января 2024 г.
Выпущено 26 мая 2023 г.
ToAsyncEnumerableAsync()
, которая ранее приводила к неполным спискам в определенных сценариях.Выпущено 27 февраля 2023 г.
WaitingStrategy
переименован в WaitOptions
и реорганизован последний, так что теперь он позволяет регулировать базовое время ожидания опроса.WaitOptions
).CompletionCallback
классов ValidationRequest
и FileValidationRequest
теперь указывает на полноценный класс CompletionCallback
вместо простого Uri