• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

为MvcMailer创建新的HttpContext,这样我就可以使用异步/等待

c/c++ 来源:SB2055 7次浏览

我使用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,或者使用其他的东西。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)