elsa-core/src/activities/Elsa.Activities.Http/Drivers/HttpRequestTriggerDriver.cs
2019-01-05 12:50:08 +01:00

56 lines
2 KiB
C#

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Activities.Http.Activities;
using Elsa.Activities.Http.Extensions;
using Elsa.Activities.Http.Models;
using Elsa.Handlers;
using Elsa.Models;
using Elsa.Results;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Localization;
namespace Elsa.Activities.Http.Drivers
{
public class HttpRequestTriggerDriver : ActivityDriver<HttpRequestTrigger>
{
private readonly IHttpContextAccessor httpContextAccessor;
private readonly IWorkflowExpressionEvaluator expressionEvaluator;
public HttpRequestTriggerDriver(
IHttpContextAccessor httpContextAccessor,
IWorkflowExpressionEvaluator expressionEvaluator)
{
this.httpContextAccessor = httpContextAccessor;
this.expressionEvaluator = expressionEvaluator;
}
protected override async Task<ActivityExecutionResult> OnExecuteAsync(HttpRequestTrigger activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken)
{
var request = httpContextAccessor.HttpContext.Request;
var model = new HttpRequestModel
{
Path = new Uri(request.Path.ToString(), UriKind.Relative),
QueryString = request.Query.ToDictionary(x => x.Key, x => x.Value),
Headers = request.Headers.ToDictionary(x => x.Key, x => x.Value),
Method = request.Method
};
if (activity.ReadContent)
{
if (request.HasFormContentType)
{
model.Form = (await request.ReadFormAsync(cancellationToken)).ToDictionary(x => x.Key, x => x.Value);
}
else
{
model.Content = await request.ReadBodyAsync();
}
}
workflowContext.CurrentScope.LastResult = model;
return TriggerEndpoint("Done");
}
}
}