C# 新的MailAddress()退出方法

C# 新的MailAddress()退出方法,c#,email,asp.net-mvc-5,mailaddress,C#,Email,Asp.net Mvc 5,Mailaddress,我有一个相当奇怪的问题,我无法理解。下面是代码: [HttpGet] [AllowAnonymous] public ActionResult SendEmail() { SendRegisterEmail("Test", "Testagain", "lastTest"); return View("Index"); } public async Task<bool> SendRegisterEmail(string subject, string message,

我有一个相当奇怪的问题,我无法理解。下面是代码:

[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);
}
[HttpGet]
[异名]
公共操作结果发送电子邮件()
{
SendRegisterEmail(“测试”、“测试增益”、“最后测试”);
返回视图(“索引”);
}
公共异步任务SendRegisterEmail(字符串主题、字符串消息、字符串收件人)
{
var email=新电子邮件();
var mailAddress=新邮件地址(收件人);
email.Subject=主题;
email.Body=消息;
var mailAddressCollection=新的mailAddressCollection();
mailAddressCollection.Add(邮件地址);
email.To=(mailAddressCollection);
返回等待发送(电子邮件);
}
现在,为了证明我的问题,我将代码分解为一行,这样我就可以看到它在哪一行中断。以下是我的发现:

当我调试它并进入
SendRegisterEmail
方法时,该行显示
var-maildAddress=new-maildAddress(to)
运行,然后退出函数并运行行
返回视图(“索引”)和页面加载。奇怪的是,我在最后添加了一个日志记录方法来发送,而日志记录从未被命中。我在Send上设置了一个断点,但它从未被命中。这就好像电子邮件的创建崩溃了,决定退出调用者函数并继续代码


我一点也不知道为什么。

SendRegisterEmail
方法是异步的,您不必等待它

当前,您启动了一个fire-and-forget操作,并在创建新的
MailAddress
实例时执行
return-View
指令。 很可能它是
FormatException
,您无法捕获它,因为异常是在另一个线程中抛出的

将您的操作方法更新为

public async Task <ActionResult> SendEmail()
{
    await SendRegisterEmail("Test", "Testagain", "lastTest");
    return View("Index");
}
public异步任务sendmail()
{
等待SendRegisterEmail(“测试”、“测试增益”、“最后测试”);
返回视图(“索引”);
}
另外,在不需要返回之前等待,您可以将其更改为

public Task<bool> SendRegisterEmail(string subject, string message, string to)
{
    var email = new Email();
    // ... 
    return Send(email);
}
公共任务SendRegisterEmail(字符串主题、字符串消息、字符串收件人)
{
var email=新电子邮件();
// ... 
返回发送(电子邮件);
}

但这与您遇到的问题无关。

啊,它现在不起作用的原因是它不喜欢“lastest”
作为一个值,它需要一个正确的电子邮件地址。您为什么要这样做?Send返回true或false。指定给“收件人”的值不是有效的电子邮件地址。这可能会导致它退出函数,并且由于它是异步的,所以会运行returnview语句