Реализация вебхука возвратов в ASP.NET

Вебхуки возвратов позволяют получать в реальном времени уведомления, когда отправленное вами письмо возвращается по какой-либо причине. Как описано в документации разработчика, HaskiMail может отправлять HTTP POST-запрос на страницу, которую вы контролируете, и передавать туда данные о возврате сразу после их обработки.

Проблема

ASP.NET, особенно WebForms, в основном рассчитан на приём данных из HTML-форм: он ожидает параметры формы и поле __VIEWSTATE. Однако HaskiMail отправляет HTTP POST-запрос, в котором нет привычных параметров. Вместо этого тело запроса содержит JSON-строку с данными о возврате, которую вам нужно извлечь и распарсить вручную.

Извлечение JSON из тела запроса

Для этого необходимо использовать низкоуровневый объект HttpRequest и прочитать поток входящего запроса. Проще всего сделать это так:
var requestReader = new StreamReader(Request.InputStream); var requestJson = requestReader.ReadToEnd();

Парсинг данных о возврате с помощью Json.NET

Библиотека Json.NET легко десериализует JSON-объект в .NET-класс. Но вам нужно будет заранее определить класс Bounce со всеми необходимыми свойствами:
public class Bounce {
  public int ID { get; set; }
  public string Type { get; set; }
  public string Email { get; set; }
  public string From { get; set; }
  public DateTime BouncedAt { get; set; }
  public string Details { get; set; }
  public bool DumpAvailable { get; set; }
  public bool Inactive { get; set; }
  public bool CanActivate { get; set; }
}
После этого можно распарсить JSON-строку так:
var bounce = JsonConvert.DeserializeObject<Bounce>(requestJson);