如何获取字符串形式的 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();
}
我在从 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();
}