如何获取字符串形式的 SendGrid 响应状态?

How to get SendGrid response status as a string?

我在从 SendGrid 检索 HTTP 响应代码,然后根据该响应更新标签时遇到问题。由于 SendGrid 调用使​​用异步方法,我无法获得 return a 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;

        }

您的方法不允许 return 值,因为您将其声明为 async Task。这意味着它是一个 async 方法 return 什么都没有(它只是一个 return 一个 Task 所以调用者知道它什么时候完成,但没有实际值)。

如果你想从 async 方法中 return 一些东西,你需要使用 Task<T> return 类型,其中 T 是类型您想要 return.

的价值

所以在这种情况下,应该是:

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

那你可以return response.StatusCode

这里有一些额外的阅读材料可以帮助您更好地理解 async 代码:

要return 必须等待来自异步方法的值。请参阅下面的示例方法调用:

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);
}

编辑:

更新您的代码以将以下内容与上述更新的 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();  
}