我已经为我的ASP.Net项目升级到SendGrid API v3,并发现在IIdentityMessageService.SendAsync函数中发送电子邮件的旧代码存在问题。
我的代码如下:
{{1}}
此代码在API v2中运行良好,但我现在在访问响应对象时收到System.MissingMemberException。
在新的示例中,等待帖子,但我可以将SendAsync签名更改为Async,因为它不是我的代码。
答案 0 :(得分:0)
在另一个SO帖子here中找到答案 - post返回的对象现在是一个ConfiguredAwaitable对象 - 结果可以通过.GetAwaiter()。GetResult()访问如下:
Public Class EmailService
Implements IIdentityMessageService
Public Function SendAsync(message As IdentityMessage) As Task Implements IIdentityMessageService.SendAsync
Dim sg = New SendGridAPIClient(ConfigurationManager.AppSettings("SendGridApiKey"))
Dim from = New Email("support@investorsedge.net", "InvestorsEdge")
Dim [to] = New Email(message.Destination)
Dim Content = New Content("text/html", message.Body)
Dim Mail = New Mail(from, message.Subject, [to], Content)
Dim response = sg.client.mail.send.post(requestBody:=Mail.Get()).GetAwaiter().GetResult()
If Not response.StatusCode = Net.HttpStatusCode.Accepted Then
AtlasDb.Log.ErrorFormat("EmailService.SendAsync", "Abnormal response code ({0}", response.StatusCode)
End If
Return Task.FromResult(response.StatusCode)
End Function
End Class
我在普通代码中不确定这对于阻止UI的效果如何,但是认为因为它在ASP.Net中的单独线程中运行,所以效果不会太差。< / p>