Как получить статус ответа SendGrid в виде строки? - PullRequest
0 голосов
/ 04 июля 2019

У меня проблема с получением кода ответа HTTP из SendGrid и последующим обновлением метки на основе этого ответа.Поскольку при вызове SendGrid используется асинхронный метод, я не могу получить возвращенный response.statuscode;

, это мой код:

 protected void BtnSend_Click(object sender, EventArgs e)
        {
                lblmsg.InnerText = SendMail(txtEmailId.Text.ToString(), 
                txtMessage.Text.ToString());  //------------

        }




        private String SendMail(String EmailId, String Message)
        {
            var status="";
           Execute(EmailId, Message).Wait();
                  return status;  
        }



   async Task Execute(String EmailId, String Message)
        {
            var apiKey = "abcdefghijklmnopqrstuvwxyz1234567890";
            var client = new SendGridClient(apiKey);
            var from = new EmailAddress("myemail@gmail.com", "Sender");
            var subject = "Testing Email";
            var to = new EmailAddress(EmailId, "Reciever");
            var plainTextContent = "You have recieved this message from me";
            var htmlContent = Message + "<br><i>-Message sent by me</i>";
            var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);
            var response = await client.SendEmailAsync(msg).ConfigureAwait(false);
            var status = response.StatusCode;

        }

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Ваш метод не допускает возвращаемого значения, так как вы объявили его как async Task. Это означает, что это async метод, который ничего не возвращает (он просто возвращает Task, поэтому вызывающая сторона знает, когда это сделано, но не имеет фактического значения).

Если вы хотите что-то вернуть из метода async, вам нужно использовать тип возврата Task<T>, где T - это тип значения, которое вы хотите вернуть.

Так что в этом случае должно быть:

async Task<HttpStatusCode> Execute(String EmailId, String Message)

Тогда вы можете return response.StatusCode

Вот некоторые дополнительные материалы, которые могут помочь вам лучше понять код async:

0 голосов
/ 04 июля 2019

Чтобы вернуть значение из асинхронного метода, его следует ожидать. Смотрите пример вызова метода ниже:

private async Task<System.Net.HttpStatusCode> Execute(String EmailId, String Message)
        {
            var apiKey = "abcdefghijklmnopqrstuvwxyz1234567890";
            var client = new SendGridClient(apiKey);
            var from = new EmailAddress("myemail@gmail.com", "Sender");
            var subject = "Testing Email";
            var to = new EmailAddress(EmailId, "Reciever");
            var plainTextContent = "You have recieved this message from me";
            var htmlContent = Message + "<br><i>-Message sent by me</i>";
            var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);
            var response = await client.SendEmailAsync(msg).ConfigureAwait(false);
            return response.StatusCode;

        }

private async Task GetStatusCodeExample(String EmailId, String Message)
{
    var statusCode = await Execute(EmailId, Message);
}

EDIT:

обновите свой код, чтобы использовать следующее вместе с обновленным выше методом Execute:

protected void BtnSend_Click(object sender, EventArgs e)
{
     lblmsg.InnerText = SendMail(txtEmailId.Text.ToString(), 
     txtMessage.Text.ToString());  //------------


private String SendMail(String EmailId, String Message)
{
     var task = Execute(EmailId, Message);
     task.Wait();
     return ((int)task.Result).ToString();  
}
...