Added builder extensions for sendhttprequest and added initial sample

This commit is contained in:
Cameron Cowen 2021-04-29 01:03:16 +01:00 committed by Sipke Schoorstra
parent 1eb8b0b45e
commit b797dd8c43
10 changed files with 355 additions and 0 deletions

View file

@ -271,6 +271,8 @@ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Persistence.EntityFramework.MySql", "src\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.MySql\Elsa.Persistence.EntityFramework.MySql.csproj", "{D55BC08B-CA82-478A-99F7-EDE90AC33160}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.SendHttp", "src\samples\aspnet\Elsa.Samples.SendHttp\Elsa.Samples.SendHttp.csproj", "{775EFD59-F99C-4D38-B54E-9734C9D9649A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -645,6 +647,18 @@ Global
{D55BC08B-CA82-478A-99F7-EDE90AC33160}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D55BC08B-CA82-478A-99F7-EDE90AC33160}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D55BC08B-CA82-478A-99F7-EDE90AC33160}.Release|Any CPU.Build.0 = Release|Any CPU
{BE284508-9582-4FCB-B0DD-0761AB940AD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BE284508-9582-4FCB-B0DD-0761AB940AD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BE284508-9582-4FCB-B0DD-0761AB940AD7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BE284508-9582-4FCB-B0DD-0761AB940AD7}.Release|Any CPU.Build.0 = Release|Any CPU
{3EB488DF-3C28-4DAD-B43E-6062E39629AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3EB488DF-3C28-4DAD-B43E-6062E39629AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3EB488DF-3C28-4DAD-B43E-6062E39629AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3EB488DF-3C28-4DAD-B43E-6062E39629AB}.Release|Any CPU.Build.0 = Release|Any CPU
{775EFD59-F99C-4D38-B54E-9734C9D9649A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{775EFD59-F99C-4D38-B54E-9734C9D9649A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{775EFD59-F99C-4D38-B54E-9734C9D9649A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{775EFD59-F99C-4D38-B54E-9734C9D9649A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -771,6 +785,9 @@ Global
{3A30EFFE-32D8-40B8-9C62-427037BB5424} = {EEBEA8AF-C8A8-4C71-A96C-D5836DE24359}
{3DF05CFC-AC77-489F-9A42-C4FDB599AA69} = {8B6B40A8-DF21-4CD2-BABD-474B79D0C3AF}
{D55BC08B-CA82-478A-99F7-EDE90AC33160} = {C865B0FD-E505-48F0-BFAF-0D4D7C1B5CA1}
{BE284508-9582-4FCB-B0DD-0761AB940AD7} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{3EB488DF-3C28-4DAD-B43E-6062E39629AB} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{775EFD59-F99C-4D38-B54E-9734C9D9649A} = {22E75696-6FE9-436A-9097-EE21C603F818}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158}

View file

@ -0,0 +1,90 @@
using Elsa.Activities.Http.Models;
using Elsa.Builders;
using Elsa.Services.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace Elsa.Activities.Http
{
public static class SendHttpRequestBuilderExtensions
{
public static IActivityBuilder SendHttpRequest(this IActivityBuilder builder, Action<ISetupActivity<SendHttpRequest>> setup, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
builder.Then(setup, null, lineNumber, sourceFile);
public static IActivityBuilder SendHttpRequest(this IActivityBuilder builder,
Func<ActivityExecutionContext, Uri?> url,
Func<ActivityExecutionContext, string?> method,
Func<ActivityExecutionContext, string?> content,
Func<ActivityExecutionContext, string?> contentType,
Func<ActivityExecutionContext, string?> authorization,
Func<ActivityExecutionContext, HttpRequestHeaders> requestHeaders,
Func<ActivityExecutionContext, bool> readContent,
Func<ActivityExecutionContext, ICollection<int>> supportedHttpCodes,
[CallerLineNumber] int lineNumber = default,
[CallerFilePath] string? sourceFile = default) =>
builder.SendHttpRequest(
setup => setup
.Set(x => x.Url, url)
.Set(x => x.Method, method)
.Set(x => x.Content, content)
.Set(x => x.ContentType, contentType)
.Set(x => x.Authorization, authorization)
.Set(x => x.RequestHeaders, requestHeaders)
.Set(x => x.ReadContent, readContent)
.Set(x => x.SupportedStatusCodes, supportedHttpCodes),
lineNumber,
sourceFile);
public static IActivityBuilder SendHttpRequest(this IActivityBuilder builder,
Func<Uri?> url,
Func<string?> method,
Func<string?> content,
Func<string?> contentType,
Func<string?> authorization,
Func<HttpRequestHeaders> requestHeaders,
Func<bool> readContent,
Func<ICollection<int>> supportedHttpCodes,
[CallerLineNumber] int lineNumber = default,
[CallerFilePath] string? sourceFile = default) =>
builder.SendHttpRequest(
setup => setup
.Set(x => x.Url, url)
.Set(x => x.Method, method)
.Set(x => x.Content, content)
.Set(x => x.ContentType, contentType)
.Set(x => x.Authorization, authorization)
.Set(x => x.RequestHeaders, requestHeaders)
.Set(x => x.ReadContent, readContent)
.Set(x => x.SupportedStatusCodes, supportedHttpCodes),
lineNumber,
sourceFile);
public static IActivityBuilder SendHttpRequest(this IActivityBuilder builder,
Uri? url,
string? method,
string? content,
string? contentType,
string? authorization,
HttpRequestHeaders requestHeaders,
bool readContent,
ICollection<int> supportedHttpCodes,
[CallerLineNumber] int lineNumber = default,
[CallerFilePath] string? sourceFile = default) =>
builder.SendHttpRequest(
setup => setup
.Set(x => x.Url, url)
.Set(x => x.Method, method)
.Set(x => x.Content, content)
.Set(x => x.ContentType, contentType)
.Set(x => x.Authorization, authorization)
.Set(x => x.RequestHeaders, requestHeaders)
.Set(x => x.ReadContent, readContent)
.Set(x => x.SupportedStatusCodes, supportedHttpCodes),
lineNumber,
sourceFile);
}
}

View file

@ -0,0 +1,108 @@
using Elsa.Activities.Http.Models;
using Elsa.Builders;
using Elsa.Services.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace Elsa.Activities.Http
{
public static class SendHttpRequestExtensions
{
public static ISetupActivity<SendHttpRequest> WithUrl(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, ValueTask<Uri?>> url) => activity.Set(x => x.Url, url);
public static ISetupActivity<SendHttpRequest> WithUrl(this ISetupActivity<SendHttpRequest> activity, Func<ValueTask<Uri?>> url) => activity.Set(x => x.Url, url);
public static ISetupActivity<SendHttpRequest> WithUrl(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, Uri?> url) => activity.Set(x => x.Url, url);
public static ISetupActivity<SendHttpRequest> WithUrl(this ISetupActivity<SendHttpRequest> activity, Func<Uri?> url) => activity.Set(x => x.Url, url);
public static ISetupActivity<SendHttpRequest> WithUrl(this ISetupActivity<SendHttpRequest> activity, Uri? url) => activity.Set(x => x.Url, url);
public static ISetupActivity<SendHttpRequest> WithMethod(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, ValueTask<string?>> method) => activity.Set(x => x.Method, method);
public static ISetupActivity<SendHttpRequest> WithMethod(this ISetupActivity<SendHttpRequest> activity, Func<ValueTask<string?>> method) => activity.Set(x => x.Method, method);
public static ISetupActivity<SendHttpRequest> WithMethod(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, string?> method) => activity.Set(x => x.Method, method);
public static ISetupActivity<SendHttpRequest> WithMethod(this ISetupActivity<SendHttpRequest> activity, Func<string?> method) => activity.Set(x => x.Method, method);
public static ISetupActivity<SendHttpRequest> WithMethod(this ISetupActivity<SendHttpRequest> activity, string? method) => activity.Set(x => x.Method, method);
public static ISetupActivity<SendHttpRequest> WithContent(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, ValueTask<string?>> content
) => activity.Set(x => x.Content, content);
public static ISetupActivity<SendHttpRequest> WithContent(this ISetupActivity<SendHttpRequest> activity, Func<ValueTask<string?>> content) => activity.Set(x => x.Content, content);
public static ISetupActivity<SendHttpRequest> WithContent(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, string?> content) => activity.Set(x => x.Content, content);
public static ISetupActivity<SendHttpRequest> WithContent(this ISetupActivity<SendHttpRequest> activity, Func<string?> content) => activity.Set(x => x.Content, content);
public static ISetupActivity<SendHttpRequest> WithContent(this ISetupActivity<SendHttpRequest> activity, string? content) => activity.Set(x => x.Content, content);
public static ISetupActivity<SendHttpRequest> WithContentType(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, ValueTask<string?>> contentType
) => activity.Set(x => x.ContentType, contentType);
public static ISetupActivity<SendHttpRequest> WithContentType(this ISetupActivity<SendHttpRequest> activity, Func<ValueTask<string?>> contentType) => activity.Set(x => x.ContentType, contentType);
public static ISetupActivity<SendHttpRequest> WithContentType(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, string?> contentType) => activity.Set(x => x.ContentType, contentType);
public static ISetupActivity<SendHttpRequest> WithContentType(this ISetupActivity<SendHttpRequest> activity, Func<string?> contentType) => activity.Set(x => x.ContentType, contentType);
public static ISetupActivity<SendHttpRequest> WithContentType(this ISetupActivity<SendHttpRequest> activity, string? contentType) => activity.Set(x => x.ContentType, contentType);
public static ISetupActivity<SendHttpRequest> WithAuthorization(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, ValueTask<string?>> authorization
) => activity.Set(x => x.Authorization, authorization);
public static ISetupActivity<SendHttpRequest> WithAuthorization(this ISetupActivity<SendHttpRequest> activity, Func<ValueTask<string?>> authorization) => activity.Set(x => x.Authorization, authorization);
public static ISetupActivity<SendHttpRequest> WithAuthorization(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, string?> authorization) => activity.Set(x => x.Authorization, authorization);
public static ISetupActivity<SendHttpRequest> WithAuthorization(this ISetupActivity<SendHttpRequest> activity, Func<string?> authorization) => activity.Set(x => x.Authorization, authorization);
public static ISetupActivity<SendHttpRequest> WithAuthorization(this ISetupActivity<SendHttpRequest> activity, string? authorization) => activity.Set(x => x.Authorization, authorization);
public static ISetupActivity<SendHttpRequest> WithRequestHeaders(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, ValueTask<HttpRequestHeaders?>> requestHeaders
) => activity.Set(x => x.RequestHeaders, requestHeaders);
public static ISetupActivity<SendHttpRequest> WithRequestHeaders(this ISetupActivity<SendHttpRequest> activity, Func<ValueTask<HttpRequestHeaders?>> requestHeaders) => activity.Set(x => x.RequestHeaders, requestHeaders);
public static ISetupActivity<SendHttpRequest> WithRequestHeaders(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, HttpRequestHeaders?> requestHeaders) => activity.Set(x => x.RequestHeaders, requestHeaders);
public static ISetupActivity<SendHttpRequest> WithRequestHeaders(this ISetupActivity<SendHttpRequest> activity, Func<HttpRequestHeaders?> requestHeaders) => activity.Set(x => x.RequestHeaders, requestHeaders);
public static ISetupActivity<SendHttpRequest> WithRequestHeaders(this ISetupActivity<SendHttpRequest> activity, HttpRequestHeaders? requestHeaders) => activity.Set(x => x.RequestHeaders, requestHeaders);
public static ISetupActivity<SendHttpRequest> WithReadContent(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, ValueTask<bool?>> readContent
) => activity.Set(x => x.ReadContent, readContent);
public static ISetupActivity<SendHttpRequest> WithReadContent(this ISetupActivity<SendHttpRequest> activity, Func<ValueTask<bool?>> readContent) => activity.Set(x => x.ReadContent, readContent);
public static ISetupActivity<SendHttpRequest> WithReadContent(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, bool?> readContent) => activity.Set(x => x.ReadContent, readContent);
public static ISetupActivity<SendHttpRequest> WithReadContent(this ISetupActivity<SendHttpRequest> activity, Func<bool?> readContent) => activity.Set(x => x.ReadContent, readContent);
public static ISetupActivity<SendHttpRequest> WithReadContent(this ISetupActivity<SendHttpRequest> activity, bool? readContent) => activity.Set(x => x.ReadContent, readContent);
public static ISetupActivity<SendHttpRequest> WithSupportedHttpCodes(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, ValueTask<ICollection<int>>> supportedHttpCodes
) => activity.Set(x => x.SupportedStatusCodes, supportedHttpCodes);
public static ISetupActivity<SendHttpRequest> WithSupportedHttpCodes(this ISetupActivity<SendHttpRequest> activity, Func<ValueTask<ICollection<int>>> supportedHttpCodes) => activity.Set(x => x.SupportedStatusCodes, supportedHttpCodes);
public static ISetupActivity<SendHttpRequest> WithSupportedHttpCodes(this ISetupActivity<SendHttpRequest> activity, Func<ActivityExecutionContext, ICollection<int>> supportedHttpCodes) => activity.Set(x => x.SupportedStatusCodes, supportedHttpCodes);
public static ISetupActivity<SendHttpRequest> WithSupportedHttpCodes(this ISetupActivity<SendHttpRequest> activity, Func<ICollection<int>> supportedHttpCodes) => activity.Set(x => x.SupportedStatusCodes, supportedHttpCodes);
public static ISetupActivity<SendHttpRequest> WithSupportedHttpCodes(this ISetupActivity<SendHttpRequest> activity, ICollection<int> supportedHttpCodes) => activity.Set(x => x.SupportedStatusCodes, supportedHttpCodes);
}
}

View file

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

View file

@ -0,0 +1,26 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Elsa.Samples.SendHttp
{
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,28 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:8929",
"sslPort": 44312
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Elsa.Samples.SendHttp": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View file

@ -0,0 +1,26 @@
using Elsa.Activities.Http;
using Elsa.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Elsa.Samples.SendHttp
{
public class SendHttpWorkflow : IWorkflow
{
public void Build(IWorkflowBuilder builder)
{
builder.WithWorkflowDefinitionId("SendHttp")
.WithVersion(1)
.WithDescription("Send test http request and return response")
.HttpEndpoint(setup => setup.WithPath("/helloworld")
.WithMethod("GET"))
.SendHttpRequest(setup => setup.WithUrl(new Uri("https://jsonplaceholder.typicode.com/todos/3"))
.WithMethod("GET")
.WithReadContent(true))
.WriteHttpResponse(setup => setup.WithStatusCode(System.Net.HttpStatusCode.OK)
.WithContent("Hello World"));
}
}
}

View file

@ -0,0 +1,29 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Elsa.Samples.SendHttp
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddElsa(options => options.AddHttpActivities()
.AddWorkflowsFrom<Startup>());
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHttpActivities();
}
}
}

View file

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}

View file

@ -0,0 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}