From 088158ec54a4d83c3e6a4260378ca2a4efa203bb Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Wed, 21 Dec 2022 22:22:21 +0100 Subject: [PATCH] Finish Hello World ASP.NET sample project --- .../Elsa.Http/Activities/WriteHttpResponse.cs | 23 ++++++++++---- .../HelloWorldHttpWorkflow.cs | 30 +++++++++++++++++++ .../aspnet/Elsa.Samples.HelloWorld/Program.cs | 11 +++++-- 3 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 src/samples/aspnet/Elsa.Samples.HelloWorld/HelloWorldHttpWorkflow.cs diff --git a/src/modules/Elsa.Http/Activities/WriteHttpResponse.cs b/src/modules/Elsa.Http/Activities/WriteHttpResponse.cs index d69638f86..019eb98b9 100644 --- a/src/modules/Elsa.Http/Activities/WriteHttpResponse.cs +++ b/src/modules/Elsa.Http/Activities/WriteHttpResponse.cs @@ -5,12 +5,25 @@ using Microsoft.AspNetCore.Http; namespace Elsa.Http; -[Activity("Elsa", "HTTP", "Write an HTTP response.", DisplayName = "HTTP Response")] +/// +/// Write a response to the current HTTP response object. +/// +[Activity("Elsa", "HTTP", "Write a response to the current HTTP response object.", DisplayName = "HTTP Response")] public class WriteHttpResponse : Activity { + /// + /// The status code to return. + /// + [Input(DefaultValue = HttpStatusCode.OK, Description = "The status code to return.")] public Input StatusCode { get; set; } = new(HttpStatusCode.OK); + + /// + /// The content to write back. + /// + [Input(Description = "The content to write back.")] public Input Content { get; set; } = new(""); + /// protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) { var httpContextAccessor = context.GetRequiredService(); @@ -18,13 +31,13 @@ public class WriteHttpResponse : Activity if (httpContext == null) { - // We're executing in a non-HTTP context (like in a virtual actor). - // Create a bookmark to allow the invoker to get the export state and resume execution from there. + // We're executing in a non-HTTP context (e.g. in a virtual actor). + // Create a bookmark to allow the invoker to export the state and resume execution from there. context.CreateBookmark(OnResumeAsync); return; } - + var response = httpContext.Response; response.StatusCode = (int)context.Get(StatusCode); @@ -45,7 +58,7 @@ public class WriteHttpResponse : Activity // We're not in an HTTP context, so let's fail. throw new Exception("Cannot execute in a non-HTTP context"); } - + var response = httpContext.Response; response.StatusCode = (int)context.Get(StatusCode); diff --git a/src/samples/aspnet/Elsa.Samples.HelloWorld/HelloWorldHttpWorkflow.cs b/src/samples/aspnet/Elsa.Samples.HelloWorld/HelloWorldHttpWorkflow.cs new file mode 100644 index 000000000..7823eaf0b --- /dev/null +++ b/src/samples/aspnet/Elsa.Samples.HelloWorld/HelloWorldHttpWorkflow.cs @@ -0,0 +1,30 @@ +using System.Net; +using Elsa.Http; +using Elsa.Workflows.Core.Activities; +using Elsa.Workflows.Core.Services; + +namespace Elsa.Samples.HelloWorld; + +public class HelloWorldHttpWorkflow : WorkflowBase +{ + protected override void Build(IWorkflowBuilder builder) + { + builder.Root = new Sequence + { + Activities = + { + new HttpEndpoint + { + Path = new("/hello-world"), + SupportedMethods = new(new[] { HttpMethods.Get }), + CanStartWorkflow = true + }, + new WriteHttpResponse + { + StatusCode = new(HttpStatusCode.OK), + Content = new("Hello world!") + } + } + }; + } +} \ No newline at end of file diff --git a/src/samples/aspnet/Elsa.Samples.HelloWorld/Program.cs b/src/samples/aspnet/Elsa.Samples.HelloWorld/Program.cs index 03c164d90..ea32f88bd 100644 --- a/src/samples/aspnet/Elsa.Samples.HelloWorld/Program.cs +++ b/src/samples/aspnet/Elsa.Samples.HelloWorld/Program.cs @@ -1,14 +1,19 @@ using Elsa.Extensions; using Elsa.Http.Extensions; -using Elsa.Workflows.Management.Extensions; +using Elsa.Samples.HelloWorld; +using Elsa.Workflows.Runtime.Extensions; var builder = WebApplication.CreateBuilder(args); var services = builder.Services; // Add Elsa services. services.AddElsa(elsa => elsa - - .UseWorkflowManagement() + // Configure the workflow runtime. + .UseWorkflowRuntime(runtime => + { + // Register our HTTP workflow with the runtime. + runtime.AddWorkflow(); + }) // Enable Elsa HTTP module (for HTTP related activities). .UseHttp()