【发布时间】:2018-02-18 02:59:35
【问题描述】:
我想在 Sitefinity 库中发布 Sitefinity MediaContent(Document、Image 和 Video)。当我查看文档时,他们使用WorkflowManager 给出了一个示例:
//Publish the DocumentLibraries item. The live version acquires new ID.
var bag = new Dictionary<string, string>();
bag.Add("ContentType", typeof(Document).FullName);
WorkflowManager.MessageWorkflow(masterDocumentId, typeof(Document), null, "Publish", false, bag);
上面的代码 sn-p 取自他们的documentation。
问题是,WorkflowManager 的底层实现使用HttpContext 来检查当前用户是否具有所需的权限。下面的sn-p来自反编译Telerik.Sitefinity.dll:
public static string MessageWorkflow(System.Guid itemId, System.Type itemType, string providerName, string operationName, bool isCheckedOut, System.Collections.Generic.Dictionary<string, string> contextBag)
{
....
dictionary.Add("operationName", operationName);
dictionary.Add("itemId", itemId);
dictionary.Add("providerName", providerName);
dictionary.Add("isCheckedOut", isCheckedOut);
dictionary.Add("contextBag", contextBag);
dictionary.Add("culture", System.Globalization.CultureInfo.CurrentCulture.Name);
dictionary.Add("httpContext", System.Web.HttpContext.Current);
if (workflowDefinition != null)
{
dictionary.Add("workflowDefinitionId", workflowDefinition.Id);
}
contextBag.Add("userHostAddress", System.Web.HttpContext.Current.Request.UserHostAddress);
...
}
如上所示,它至少调用了System.Web.HttpContext.Current两次,这是坏。特别是如果我使用HostingEnvironment.QueueBackgroundWorkItem 或什至使用显然在HttpContext.Current 之外运行的Quartz 延迟执行。
我的问题是,是否有另一种方法可以在 提升模式 中发布 Sitefinity MediaContent 并且完全不依赖于 HttpContext?
目前我正在使用 Sitefinity 9.2,据我所知,上述 API 也存在于 Sitefinity 7.3 上。
【问题讨论】:
标签: sitefinity