我有一个相当奇怪的问题,我无法解决这个问题。所以这是代码:
[HttpGet]
[AllowAnonymous]
public ActionResult SendEmail()
{
SendRegisterEmail("Test", "Testagain", "lastTest");
return View("Index");
}
public async Task<bool> SendRegisterEmail(string subject, string message, string to)
{
var email = new Email();
var mailAddress = new MailAddress(to);
email.Subject = subject;
email.Body = message;
var mailAddressCollection = new MailAddressCollection();
mailAddressCollection.Add(mailAddress);
email.To = (mailAddressCollection);
return await Send(email);
}
现在为了证明我的问题,我将代码分解成单行,这样我就可以看到它在哪一行上断。这是我发现的:
当我调试此问题并进入SendRegisterEmail
方法时,显示var mailAddress = new MailAddress(to);
行,然后退出该函数并运行行return View("Index");
并加载页面起来。奇怪的是我在最后添加了一个日志记录方法,并且记录永远不会被命中。我在Send上放了一个断点,它从未被击中。就像电子邮件的创建崩溃一样,决定退出调用函数并继续使用代码。
我不知道为什么会有最微弱的线索。
答案 0 :(得分:2)
SendRegisterEmail
方法是异步的,你不是在等待它。
目前,您启动了“即发即弃”操作,并在创建新的return View
实例时执行MailAddress
指令。
最有可能的是throws FormatException
你无法捕获,因为异常是在另一个线程中引发的。
将您的操作方法更新为
public async Task <ActionResult> SendEmail()
{
await SendRegisterEmail("Test", "Testagain", "lastTest");
return View("Index");
}
在真正需要返回之前还等待,您可以将其更改为
public Task<bool> SendRegisterEmail(string subject, string message, string to)
{
var email = new Email();
// ...
return Send(email);
}
但这与你遇到的问题无关。