私は、メールを送信するためにHttpContextに依存するMVCMailerを使用しています。非同期/待機を使用できるようにMvcMailer用の新しいHttpContextを作成します。
WebBobから、またはConfigureAwait(false)
を呼び出すフローで使用される非同期タスクからメールを送信しているため、MVCMailerコードを取得する前にコンテキストを失います。
私のオプションがあるように見える:
ConfigureAwait(false)
(私のサービスの多くは、いくつかの点でメーリングリストを使用するので、この1つのインスタンスが、私は必要なコンテキストを削除します)- 新を使用しないでくださいのHttpContext NEWINGアップHttpConte - 私は迅速かつ簡単な解決策を探していMvcMailerを使用して
第三者を使用しないで1
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