我想在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);
上面的代码段取自documentation。
问题是,WorkflowManager
的底层实现使用HttpContext
来检查当前用户是否具有所需的权限。下面的代码段来自反编译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
以外MediaContent
运行。{/ p>
我的问题是,是否有另一种方法可以在提升模式中发布Sitefinity HttpContext
并且完全不依赖于 import requests
torport = 9050
proxies = {
'http': "socks5h://localhost:{}".format(torport),
'https': "socks5h://localhost:{}".format(torport)
}
print(requests.get('http://icanhazip.com', proxies=proxies).content)
?< / p>
目前我正在使用 Sitefinity 9.2 ,据我所知,上面的API也存在于Sitefinity 7.3上。
答案 0 :(得分:1)
“如上所示它至少调用System.Web.HttpContext.Current两次,这是坏的。” - 这很可能是反编译器的一个问题 - 我相信他们没有两次调用它。
对于高架模式,你可以使用它,但它仍然需要HttpContext
...
SystemManager.RunWithElevatedPrivilege(p =>
{
WorkflowManager.MessageWorkflow(id, itemType, null, "Publish", false, bag);
});