2016-07-15 5 views
1

Ich habe ein ziemlich seltsames Problem, dass ich nicht meinen Kopf wickeln kann. So, hier ist der Code:new MailAddress() Beendet die Methode

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

Jetzt ist mein Problem, das ich den Code in einzelne Linien brach um zu beweisen, so kann ich, auf dem sehen Linie es bricht. Hier ist, was ich gefunden habe:

Wenn ich debuggen dies und ich trete in die SendRegisterEmail Methode, dass die Linie, sagt var mailAddress = new MailAddress(to); fuehrt wird und dann verlässt er die Funktion aus und führt die Linie return View("Index"); und die Seite geladen werden. Das Seltsame ist, dass ich am Ende eine Protokollierungsmethode zu Send hinzugefügt habe, und dass das Logging nie getroffen wird. Ich habe einen Breakpoint auf Send gesetzt und es wurde nie getroffen. Es ist so, als ob die Erstellung von E-Mails abgestürzt wäre, beschlossen, die Anruferfunktion zu verlassen und mit dem Code fortzufahren.

Ich habe keine Ahnung, warum.

+0

Der Wert, den Sie "to" zuweisen, ist keine gültige E-Mail-Adresse. Dies kann dazu führen, dass die Funktion beendet wird und asynchron die Anweisung view –

Antwort

2

SendRegisterEmail Methode ist asynchron, Sie warten nicht darauf.

Derzeit starten Sie eine Fire-and-Forget-Operation, und die Anweisung return View wird ausgeführt, während Sie eine neue MailAddress Instanz erstellen. Höchstwahrscheinlich throwsFormatException, die Sie nicht abfangen können, weil die Ausnahme in einem anderen Thread ausgelöst wird.

Update Ihre Aktionsmethode zu

public async Task <ActionResult> SendEmail() 
{ 
    await SendRegisterEmail("Test", "Testagain", "lastTest"); 
    return View("Index"); 
} 

wartet auch vor der Rückkehr nicht wirklich nötig ist, können Sie es ändern zu

aber das ist nicht das Problem, das Sie haben im Zusammenhang.

+0

ausgeführt wird, die ich aktualisiert habe, und ich bekomme immer noch das gleiche Ergebnis. – Bojan

+0

Ich würde auf den Send (Email) warten und einen wahren, persönlichen ... –

+0

zurückgeben Ah, der Grund, warum es jetzt nicht funktioniert ist, weil es nicht "lastTest" 'als Wert mag, es will einen richtigen E-Mail-Addresse. – Bojan

Verwandte Themen