将内容编辑网址作为字符串获取,不包含UrlHelpers或Orchard令牌

时间:2017-11-23 00:56:43

标签: orchardcms orchardcms-1.10

我正在尝试从后端获取内容的编辑URL作为字符串,捕获的是我在工作流活动中,所以我不能使用Url.Action ...或Url.ItemEditLink .. 。或其他UrlHelper,就好像它是一个控制器或一个视图。此外,虽然我在工作流程中,但我需要的内容不是workflowContext或activityContext的一部分,所以我也不能使用这些或令牌。

解决方案可能是获取内容元数据和站点baseUrl并尝试手动构建它,但我认为这种方式容易出错。

感谢。

1 个答案:

答案 0 :(得分:1)

这是我在活动中构建Uri的方式:

public class MyClass : Task
{
    private readonly RequestContext _requestContext;
    ...

    public MyActivity(RequestContext requestContext, ...)
    {
        _requestContext = requestContext;
        ...
    }

    ...

    public override IEnumerable<LocalizedString> Execute(WorkflowContext workflowContext, ActivityContext activityContext)
    {
        var content = ... get using ID
        var helper = new UrlHelper(_requestContext);
        var baseurl = new Uri(_orchardServices.WorkContext.CurrentSite.BaseUrl);
        Uri completeurl = new Uri(baseurl, helper.ItemDisplayUrl(content));

        yield return T("Done");
    }
}

事实证明我实际上是半手动构建Uri,但我还没有遇到过这种方法的问题。您可以在Orchard内部仅使用ItemDisplayUrl进行导航;我必须得到完整的URL,因为字符串被发送到外部程序(Slack)。