我使用MVCMailer,它依賴於HttpContext發送郵件。爲MvcMailer創建新的HttpContext,這樣我就可以使用異步/等待
在某些情況下,我從WebJob發送郵件,或者在調用ConfigureAwait(false)
的流中使用的異步任務中發送郵件,這樣在我點擊MVCMailer代碼之前就會丟失上下文。
我的選擇似乎是:
- 切勿使用
ConfigureAwait(false)
(所以我的很多服務使用郵件在某些時候,所以這一個實例將刪除我需要的情況下) - 新建了一個的HttpContext如果需要的話,這樣我可以郵寄儘管沒有一個
- 不使用MvcMailer和使用第三方
我正在尋找快速和簡單的解決方案 - newing了一個HttpConte xt如果需要。這可能嗎?
這是我現在使用的代碼依賴於HttpContext的:
public class UserMailer : MailerBase {
public UserMailer() {
MasterName = "_Layout";
}
public virtual MvcMailMessage Message(MailMessage message, string unsubscribeLink = null) {
ViewBag.Body = message.Body;
ViewBag.Subject = message.Subject;
ViewBag.UnsubscribeLink = unsubscribeLink;
return Populate(x => {
x.ViewName = "Message";
});
}
}
如果你有代碼去除請求的上下文*當你仍然打算在請求的上下文中*那麼這是一個錯誤,而不僅僅是爲了這個類的目的,但總的來說,因爲它需要被修復。只有在確定該方法及其調用的任何內容在概念上與請求無關時,該代碼才應該刪除當前上下文。 – Servy
@Servy這就是爲什麼我列出了第一個選項,這是我想避免的。 – SB2055
試圖避免修復最終會導致各種應用程序問題的各種問題,而不僅僅是這部分,並不會很好地結束。如果你的程序不適當地在必要的上下文之外運行代碼,那麼你應該修復這個問題。 – Servy