Служба приложений с дефисом в параметре http - PullRequest
0 голосов
/ 10 мая 2018

Итак, мы заняты проектом ABP и пытаемся указать параметр http для сопоставления с параметром службы приложения.Webhook от Mailgun использует «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.Мы не можем назвать параметр функции Message-Id из-за правил именования в C #.Мы также не можем получить данные из тела POST в виде JSON, поскольку Mailgun поддерживает только x-www-form-urlencoded для своих вызовов webhook.Есть идеи?

1 Ответ

0 голосов
/ 10 мая 2018

Вы можете использовать класс для параметров и использовать атрибут BindProperty, чтобы изменить имя message-id.

Например:

public class MailDeliveredRequest
{
    public int Timestamp { get; set; }
    public string Token { get;set; }
    public string Signature { get;set; }

    [BindProperty(Name="Message-Id")]
    public string MessageId { get;set; }
}

Затем измените объявление метода:

public async Task MailDelivered(MailDeliveredRequest msg)
{
....
}

Все значения строки запроса доступны с помощью переменной msg, например. msg.MessageId и т. Д.

...