diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 38bece4e1..000000000 --- a/.dockerignore +++ /dev/null @@ -1,25 +0,0 @@ -**/.dockerignore -**/.env -**/.git -**/.gitignore -**/.project -**/.settings -**/.toolstarget -**/.vs -**/.vscode -**/.idea -**/*.*proj.user -**/*.dbmdl -**/*.jfm -**/azds.yaml -**/bin -**/charts -**/docker-compose* -**/Dockerfile* -**/node_modules -**/npm-debug.log -**/obj -**/secrets.dev.yaml -**/values.dev.yaml -LICENSE -README.md \ No newline at end of file diff --git a/Elsa.sln b/Elsa.sln index e41681668..c99bab03f 100644 --- a/Elsa.sln +++ b/Elsa.sln @@ -196,6 +196,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.WorkflowProviders.Flue EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.AspNet.ProtoActorRuntime.AzureContainerApps", "src\samples\aspnet\Elsa.Samples.AspNet.ProtoActorRuntime.AzureContainerApps\Elsa.Samples.AspNet.ProtoActorRuntime.AzureContainerApps.csproj", "{3212A999-4AC4-4911-9AA4-92AB906BCB5E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.AspNet.HttpEndpoints", "src\samples\aspnet\Elsa.Samples.AspNet.HttpEndpoints\Elsa.Samples.AspNet.HttpEndpoints.csproj", "{165ACC9D-B67C-4B49-A818-ECFD247C899C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -498,6 +500,10 @@ Global {3212A999-4AC4-4911-9AA4-92AB906BCB5E}.Debug|Any CPU.Build.0 = Debug|Any CPU {3212A999-4AC4-4911-9AA4-92AB906BCB5E}.Release|Any CPU.ActiveCfg = Release|Any CPU {3212A999-4AC4-4911-9AA4-92AB906BCB5E}.Release|Any CPU.Build.0 = Release|Any CPU + {165ACC9D-B67C-4B49-A818-ECFD247C899C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {165ACC9D-B67C-4B49-A818-ECFD247C899C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {165ACC9D-B67C-4B49-A818-ECFD247C899C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {165ACC9D-B67C-4B49-A818-ECFD247C899C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {155227F0-A33B-40AA-A4B4-06F813EB921B} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F} @@ -585,5 +591,6 @@ Global {C5043453-5FB8-4796-9A80-C4C766F2CB62} = {56C2FFB8-EA54-45B5-A095-4A78142EB4B5} {044C3108-FE79-460A-9C31-A03C30228836} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} {3212A999-4AC4-4911-9AA4-92AB906BCB5E} = {56C2FFB8-EA54-45B5-A095-4A78142EB4B5} + {165ACC9D-B67C-4B49-A818-ECFD247C899C} = {56C2FFB8-EA54-45B5-A095-4A78142EB4B5} EndGlobalSection EndGlobal diff --git a/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/Elsa.Samples.AspNet.HttpEndpoints.csproj b/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/Elsa.Samples.AspNet.HttpEndpoints.csproj new file mode 100644 index 000000000..c76dbe5f3 --- /dev/null +++ b/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/Elsa.Samples.AspNet.HttpEndpoints.csproj @@ -0,0 +1,16 @@ + + + + net7.0 + enable + enable + + + + + + + + + + diff --git a/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/Program.cs b/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/Program.cs new file mode 100644 index 000000000..4525b3bf5 --- /dev/null +++ b/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/Program.cs @@ -0,0 +1,22 @@ +using Elsa.Extensions; +using Elsa.Samples.AspNet.HttpEndpoints.Workflows; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +builder.Services.AddElsa(elsa => +{ + // Add workflow. + elsa.AddWorkflow(); + + // Enable the HTTP feature for HTTP activities. + elsa.UseHttp(); +}); + +builder.Services.AddAuthorization(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +app.UseWorkflows(); +app.Run(); \ No newline at end of file diff --git a/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/Properties/launchSettings.json b/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/Properties/launchSettings.json new file mode 100644 index 000000000..03cdc5116 --- /dev/null +++ b/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/Properties/launchSettings.json @@ -0,0 +1,37 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:51383", + "sslPort": 44336 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5020", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7042;http://localhost:5020", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/Workflows/SubmissionWorkflow.cs b/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/Workflows/SubmissionWorkflow.cs new file mode 100644 index 000000000..63b6cbb4c --- /dev/null +++ b/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/Workflows/SubmissionWorkflow.cs @@ -0,0 +1,53 @@ +using System.Net.Mime; +using Elsa.Extensions; +using Elsa.Http; +using Elsa.Workflows.Core.Abstractions; +using Elsa.Workflows.Core.Activities; +using Elsa.Workflows.Core.Contracts; + +namespace Elsa.Samples.AspNet.HttpEndpoints.Workflows; + +/// +/// A workflow that acts as an HTTP endpoint to which a client can POST a JSON payload. +/// +public class SubmissionWorkflow : WorkflowBase +{ + protected override void Build(IWorkflowBuilder builder) + { + // The payload will be deserialized into a dynamic object. The JSON might look like this: + // { + // "name": "John Doe", + // "email": "john.doe@localhost" + // } + var payloadVariable = builder.WithVariable().WithMemoryStorage(); + + builder.Root = new Sequence + { + Activities = + { + new HttpEndpoint + { + Path = new("submit"), + SupportedMethods = new(new[]{HttpMethods.Post}), + CanStartWorkflow = true, + ParsedContent = new(payloadVariable) + }, + new WriteHttpResponse + { + ContentType = new(MediaTypeNames.Application.Json), + Content = new(context => + { + var payload = payloadVariable.Get(context)!; + var name = payload.name; + var email = payload.email; + + return new + { + Message = $"Dear {name}, thank you for submitting your information! We'll send you an email at {email} shortly.", + }; + }), + } + } + }; + } +} \ No newline at end of file diff --git a/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/appsettings.json b/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/appsettings.json new file mode 100644 index 000000000..10f68b8c8 --- /dev/null +++ b/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/submit.http b/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/submit.http new file mode 100644 index 000000000..b99e2ff98 --- /dev/null +++ b/src/samples/aspnet/Elsa.Samples.AspNet.HttpEndpoints/submit.http @@ -0,0 +1,9 @@ +### John Doe + +POST https://localhost:5001/workflows/submit +Content-Type: application/json + +{ + "name": "John Doe", + "email": "john.doe@acme.com" +} \ No newline at end of file