elsa-core/src/activities/Elsa.Activities.Http/Middleware/HttpRequestMiddleware.cs

37 lines
1.2 KiB
C#
Raw Normal View History

2020-10-17 10:49:41 +00:00
using System.Linq;
using System.Threading.Tasks;
2020-10-17 10:49:41 +00:00
using Elsa.Activities.Http.Triggers;
using Elsa.Services;
using Elsa.Triggers;
using Microsoft.AspNetCore.Http;
namespace Elsa.Activities.Http.Middleware
{
2020-10-17 10:49:41 +00:00
public class ReceiveHttpRequestMiddleware
{
private readonly RequestDelegate _next;
2020-10-17 10:49:41 +00:00
public ReceiveHttpRequestMiddleware(RequestDelegate next)
{
_next = next;
}
2020-10-23 10:40:33 +00:00
public async Task InvokeAsync(HttpContext httpContext, IWorkflowSelector workflowSelector, IWorkflowRunner workflowRunner)
{
2020-10-17 10:49:41 +00:00
var path = httpContext.Request.Path;
var method = httpContext.Request.Method;
var cancellationToken = httpContext.RequestAborted;
2020-10-17 13:38:27 +00:00
2020-10-17 10:49:41 +00:00
var results = await workflowSelector.SelectWorkflowsAsync<ReceiveHttpRequestTrigger>(
2020-10-17 13:38:27 +00:00
x => x.Path == path && x.Method == null || x.Method == method,
cancellationToken);
2020-10-17 10:49:41 +00:00
var result = results.FirstOrDefault();
2020-10-30 15:16:06 +00:00
2020-10-17 10:49:41 +00:00
if (result == null)
await _next(httpContext);
else
2020-10-30 15:16:06 +00:00
await workflowRunner.RunWorkflowAsync(result.WorkflowBlueprint, result.WorkflowInstance, result.ActivityId, cancellationToken: cancellationToken);
}
}
}