Add sample project demonstrating invoking workflows from controllers

This commit is contained in:
Sipke Schoorstra 2021-02-25 13:33:08 +01:00
parent f34409696d
commit 5584ccfc90
8 changed files with 136 additions and 0 deletions

View file

@ -238,6 +238,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.UnitTests", "test\unit
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unit", "unit", "{E1378A53-424A-4E50-9D03-71DB9F7EE57C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.InvokeWorkflowFromController", "src\samples\aspnet\Elsa.Samples.InvokeWorkflowFromController\Elsa.Samples.InvokeWorkflowFromController.csproj", "{346A3A87-A839-499A-A143-3D267A951905}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -568,6 +570,10 @@ Global
{F822DE2F-A91D-416E-BF4A-A6C466C1BF0A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F822DE2F-A91D-416E-BF4A-A6C466C1BF0A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F822DE2F-A91D-416E-BF4A-A6C466C1BF0A}.Release|Any CPU.Build.0 = Release|Any CPU
{346A3A87-A839-499A-A143-3D267A951905}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{346A3A87-A839-499A-A143-3D267A951905}.Debug|Any CPU.Build.0 = Debug|Any CPU
{346A3A87-A839-499A-A143-3D267A951905}.Release|Any CPU.ActiveCfg = Release|Any CPU
{346A3A87-A839-499A-A143-3D267A951905}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -681,6 +687,7 @@ Global
{DB42A8DA-06CA-4402-9C87-8F7F055AB37E} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{E1378A53-424A-4E50-9D03-71DB9F7EE57C} = {AB1AE008-6FD6-414C-8E88-D735F42E1FA6}
{F822DE2F-A91D-416E-BF4A-A6C466C1BF0A} = {E1378A53-424A-4E50-9D03-71DB9F7EE57C}
{346A3A87-A839-499A-A143-3D267A951905} = {22E75696-6FE9-436A-9097-EE21C603F818}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158}

View file

@ -0,0 +1,28 @@
using System.Threading.Tasks;
using Elsa.Samples.InvokeWorkflowFromController.Workflows;
using Elsa.Services;
using Microsoft.AspNetCore.Mvc;
namespace Elsa.Samples.InvokeWorkflowFromController.Controllers
{
[ApiController]
[Route("launch")]
public class LaunchController : Controller
{
private readonly IWorkflowRunner _workflowRunner;
public LaunchController(IWorkflowRunner workflowRunner)
{
_workflowRunner = workflowRunner;
}
[HttpGet]
public async Task<IActionResult> Launch()
{
await _workflowRunner.RunWorkflowAsync<RocketWorkflow>();
// Returning empty (the workflow will write an HTTP response).
return new EmptyResult();
}
}
}

View file

@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,14 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
namespace Elsa.Samples.InvokeWorkflowFromController
{
public class Program
{
public static void Main(string[] args) => CreateHostBuilder(args).Build().Run();
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
}
}

View file

@ -0,0 +1,27 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:62744/",
"sslPort": 44336
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Elsa.Samples.HelloWorldHttp": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}

View file

@ -0,0 +1,26 @@
using Elsa.Samples.InvokeWorkflowFromController.Workflows;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
namespace Elsa.Samples.InvokeWorkflowFromController
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services
.AddElsa(options => options
.AddHttpActivities()
.AddWorkflow<RocketWorkflow>());
}
public void Configure(IApplicationBuilder app)
{
app.UseRouting();
app.UseEndpoints(endpoints => endpoints.MapControllers());
app.UseWelcomePage();
}
}
}

View file

@ -0,0 +1,21 @@
using System.Net;
using Elsa.Activities.Http;
using Elsa.Builders;
namespace Elsa.Samples.InvokeWorkflowFromController.Workflows
{
/// <summary>
/// A workflow that takes us to the moon.
/// </summary>
public class RocketWorkflow : IWorkflow
{
public void Build(IWorkflowBuilder builder)
{
builder
.WriteHttpResponse(activity => activity
.WithStatusCode(HttpStatusCode.OK)
.WithContentType("text/plain")
.WithContent("We're going to the moon!"));
}
}
}

View file

@ -0,0 +1 @@
GET http://localhost:5000/launch