[英]Create new HttpContext for MvcMailer so I can use async/await
我正在使用MVCMailer,它依赖于HttpContext来发送邮件。
在某些情况下,我是从WebJob发送邮件,或者是在调用ConfigureAwait(false)
的流中使用的异步任务,所以在我点击MVCMailer代码之前我丢失了上下文。
我的选择似乎是:
ConfigureAwait(false)
(我的许多服务在某些时候都使用Mailing,因此其中一个实例将删除我需要的上下文) 我正在寻找快速简便的解决方案 - 如果需要,可以新建一个HttpContext。 这可能吗?
这是我现在使用的代码,它依赖于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,或者使用其他东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.