为MvcMailer创建新的HttpContext,这样我就可以使用异步/等待
我使用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";
});
}
}
回答:
如果MvcMailer都必须有一个HttpContext的参考,我想它抽象。创建一个通用的邮件接口或基类(看起来像你现在有MailerBase)如果您有:
public class WebJobMailer : MailerBase { .. }
然后你就可以有webjob使用此实现,但你的MVC应用程序的执行MvcMailer ... WebJob邮件程序可以回退到System.Net.Mail,或者使用其他的东西。
以上是 为MvcMailer创建新的HttpContext,这样我就可以使用异步/等待 的全部内容, 来源链接: utcz.com/qa/260317.html