如何将从HttpContext检索的值传递给BackgroundJob.Enqueue

时间:2018-04-24 16:44:22

标签: hangfire

我的控制器中有这个代码:

var user = HttpContext == null ? null 
                               : HttpContext.Items["ApplicationUser"] as ApplicationUser;
int organisationid = user == null ? 0
                                  : user.OrganisationID;
BackgroundJob.Enqueue(() => Merge(organisationid));

因此后台作业在我的控制器中调用Merge方法:

public void Merge(int organisationid)
{
    _Uow.MergeSHQSCostsTable(organisationid);
}

但我希望merge方法中的调用使用从请求中检索到的organisationid,并在调用Enqueue时可用。我怎么做?目前,我的代码总是传递零值,因为运行后台作业时HttpContext为空。

1 个答案:

答案 0 :(得分:0)

诀窍是将调用封装到BackgroundJob.Enqueue的单独方法中,以便Hangfire可以序列化参数:

public SHQSController(IUnitOfWork uow) : base(uow)
{
   //CurrentOrganisationID is retrieved from HttpContext
   EnqueueMerge(CurrentOrganisationID);
}

private void EnqueueMerge(int organisationid)
{
    BackgroundJob.Enqueue(() => Merge(organisationid));
}