将内容编辑 URL 作为字符串获取,不使用 UrlHelpers 或 Orchard 标记
Get a content edit URL as a string without UrlHelpers or Orchard tokens
我正在尝试从后端获取内容的编辑 URL 作为字符串,问题是我在工作流程中 activity,所以我不能使用 Url.Action... 或 Url.ItemEditLink... 或其他 UrlHelpers,就好像它是控制器或视图一样。此外,虽然我在工作流中,但我需要它的内容不是 workflowContext 或 activityContext 的一部分,所以我也不能使用这些或标记。
一个解决方案可能是获取内容元数据和站点 baseUrl 并尝试手动构建它,但我认为这种方式容易出错。
谢谢。
这就是我在 activity 中构建 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,但我没有遇到过这种方法的问题。您可以只使用 ItemDisplayUrl 在 Orchard 内进行导航;我必须得到完整的 URL 因为字符串被发送到外部程序 (Slack)。
我正在尝试从后端获取内容的编辑 URL 作为字符串,问题是我在工作流程中 activity,所以我不能使用 Url.Action... 或 Url.ItemEditLink... 或其他 UrlHelpers,就好像它是控制器或视图一样。此外,虽然我在工作流中,但我需要它的内容不是 workflowContext 或 activityContext 的一部分,所以我也不能使用这些或标记。
一个解决方案可能是获取内容元数据和站点 baseUrl 并尝试手动构建它,但我认为这种方式容易出错。
谢谢。
这就是我在 activity 中构建 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,但我没有遇到过这种方法的问题。您可以只使用 ItemDisplayUrl 在 Orchard 内进行导航;我必须得到完整的 URL 因为字符串被发送到外部程序 (Slack)。