因此,我们正忙于一个 ABP 项目,并努力指定 http 参数以映射到应用服务参数。Mailgun 的 Webhook 使用“Message-Id”作为 http 参数,我们正在努力从应用服务访问它。
这是我们的应用服务:
public async Task MailDelivered(int timestamp, string token, string signature, string MessageId)
{
var isValid = IsMailGunSignatureValid(timestamp, token, signature);
if (isValid)
{
Console.WriteLine($"Message id: {MessageId}");
var entity = await communicationEventRepository.FirstOrDefaultAsync(entry => entry.MessageId == $"{MessageId}");
if (entity != null)
{
var unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
entity.DeliveredTime = unixEpoch.AddSeconds(timestamp);
await communicationEventRepository.UpdateAsync(entity);
}
else
{
throw new UserFriendlyException("Invalid message-id.");
}
}
else
{
throw new UserFriendlyException("Invalid signature.");
}
}
但是,我们得到了 MessageId 的空白字符串。由于 C# 命名规则,我们无法命名函数参数 Message-Id。我们也无法从 POST 正文中获取 JSON 格式的数据,因为 Mailgun 仅支持 x-www-form-urlencoded 的 webhook 调用。有任何想法吗?