如何解决使用 Elsa Workflow 2.0 如何创建基于 HttpEndpoint 的活动
我们正在尝试将 Elsa 用于一个项目,但我们现在面临一些困难,因此非常需要建议。我们要做的一件事是基于现有的 HttpEndpoint 创建一个 Activity。但是,由于源代码来自 https://github.com/elsa-workflows/elsa-core,在 google 上搜索了一些文档和示例后,我们一直无法弄清楚。
这正是我们正在尝试做的事情。
期待建议和指导。谢谢!
解决方法
您可以执行类似于 Webhooks 模块正在执行的操作。而不是
从 HttpEndpoint
继承而来,它使用 IActivityTypeProvider
实现,该实现可动态生成重用 HttpEndpoint
的新活动类型。
在您的情况下,您的活动类型提供程序只需要生成一个活动类型(例如 MyEndpoint
),它可以预先配置您想要的任何和所有方面,包括默认的 Path
属性值.
直接从 HttpEndpoint 派生新的活动类型也可以。您必须实现自己的书签提供程序来提供 HttpEndpointBookmark
对象 - HttpEndpoint
活动的 HTTP 中间件依赖于此。
示例:
public class MyEndpointBookmarkProvider : BookmarkProvider<HttpEndpointBookmark>
{
public override bool SupportsActivity(BookmarkProviderContext context) => context.ActivityType.TypeName == nameof(MyEndpoint);
public override async ValueTask<IEnumerable<BookmarkResult>> GetBookmarksAsync(BookmarkProviderContext context,CancellationToken cancellationToken)
{
var path = await context.ReadActivityPropertyAsync<MyEndpoint,PathString>(x => x.Path,cancellationToken);
var methods = (await context.ReadActivityPropertyAsync<MyEndpoint,HashSet<string>>(x => x.Methods,cancellationToken))?.Select(ToLower) ?? Enumerable.Empty<string>();
BookmarkResult CreateBookmark(string method) => Result(new(path,method),nameof(HttpEndpoint));
return methods.Select(CreateBookmark);
}
private static string ToLower(string s) => s.ToLowerInvariant();
}
当被编入索引的活动类型为 "MyEndpoint"
时,上述书签提供程序为您的自定义活动提供书签。
或者,您可以完全采用不同的路线,并简单地实现一个 API 端点(ASP.NET Core 控制器、中间件或路由端点),该端点根据您的自定义活动触发工作流。我在这里写了一些关于这个过程的文档:https://elsa-workflows.github.io/elsa-core/docs/next/guides/guides-blocking-activities
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。