发布Sitefinity MediaContent的正确方法

时间:2018-02-18 02:59:36

标签: sitefinity

我想在Sitefinity库中发布Sitefinity MediaContentDocumentImageVideo。当我查看文档时,他们使用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上。

1 个答案:

答案 0 :(得分:1)

如上所示它至少调用System.Web.HttpContext.Current两次,这是坏的。” - 这很可能是反编译器的一个问题 - 我相信他们没有两次调用它。

对于高架模式,你可以使用它,但它仍然需要HttpContext

...
SystemManager.RunWithElevatedPrivilege(p =>
{
    WorkflowManager.MessageWorkflow(id, itemType, null, "Publish", false, bag);
});