为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

回到顶部