Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
7e8128e
Add CShells package references and integrate shell features into the …
sfmskywalker Dec 4, 2025
e8a875e
Annotate shell features with `[ShellFeature]` attribute and update `T…
sfmskywalker Dec 4, 2025
a3dd331
Merge branch 'develop/3.6.0' into enh/shells
sfmskywalker Dec 5, 2025
096202d
Revert "Annotate shell features with `[ShellFeature]` attribute and u…
sfmskywalker Dec 5, 2025
ff4342a
Introduce `Elsa.ModularServer.Web` with a minimal API, restructure sh…
sfmskywalker Dec 5, 2025
23a33c7
Update `CShells` package references, add Fody weaver, and configure n…
sfmskywalker Dec 6, 2025
2cf7531
Merge branch 'develop/3.6.0' into enh/shells
sfmskywalker Dec 18, 2025
1ba3a5d
Adds CShells integration to Elsa
sfmskywalker Dec 19, 2025
5cac57d
Merge branch 'main' into enh/shells
sfmskywalker Jan 7, 2026
91d2e9d
Refactor CShells: enhance pipeline configuration and features
sfmskywalker Jan 7, 2026
1c5a025
Merge branch 'main' into enh/shells
sfmskywalker Jan 14, 2026
49d035d
Add feature registration system and FastEndpoints integration
sfmskywalker Jan 15, 2026
f758b12
Refactor shell routing and enhance global route handling
sfmskywalker Jan 15, 2026
f4bbaf9
Refactor feature endpoints to use `IInstalledFeatureProvider` for imp…
sfmskywalker Jan 15, 2026
50b55ff
Add display names, descriptions, and dependency enhancements to shell…
sfmskywalker Jan 15, 2026
30548bd
Add FastEndpoints references and update package versions
sfmskywalker Jan 15, 2026
c95e1fe
Add Identity and DefaultAuthentication features to appsettings.json c…
sfmskywalker Jan 15, 2026
98415cd
Add project references for Elsa.Identity and CShells.FastEndpoints.Ab…
sfmskywalker Jan 15, 2026
331b605
Add `Identity` and `DefaultAuthentication` shell features with enhanc…
sfmskywalker Jan 15, 2026
92e4f9f
Set default signing key in `IdentityTokenOptions` for identity config…
sfmskywalker Jan 15, 2026
1a64e13
Merge branch 'main' into enh/shells
sfmskywalker Jan 18, 2026
6486617
Add service exclusion infrastructure for shell-specific contexts
sfmskywalker Jan 18, 2026
3b6bab1
Refactor CShells authentication and authorization APIs
sfmskywalker Jan 18, 2026
14520ae
Add Elsa-specific FastEndpoints configurator and feature
sfmskywalker Jan 18, 2026
866d661
Update Workflow API feature dependency to `ElsaFastEndpoints`
sfmskywalker Jan 18, 2026
4ed87d5
Pass `cancellationToken` to `ReadToEndAsync` in `PostEndpoint` for im…
sfmskywalker Jan 18, 2026
c9ffe29
Add project references for CShells.AspNetCore and CShells.FastEndpoin…
sfmskywalker Jan 18, 2026
5c35c68
Update CShells package versions to `0.0.6-preview.30` and add `CShell…
sfmskywalker Jan 18, 2026
d3f52ff
Configures shell routing and features
sfmskywalker Jan 19, 2026
bea6e77
Merge branch 'main' into enh/shells
sfmskywalker Jan 19, 2026
d71e22d
Add shell lifecycle management and notification handlers
sfmskywalker Jan 19, 2026
855bfb0
Introduces EF Core persistence layer
sfmskywalker Jan 20, 2026
d0e68c1
Add comprehensive feature configuration validation system
sfmskywalker Jan 21, 2026
e1b2afe
Merge remote-tracking branch 'origin/main' into enh/shells
sfmskywalker Feb 8, 2026
1400053
Add persistence shell features for MySql, Oracle, PostgreSql, and Sqlite
sfmskywalker Feb 8, 2026
c8cea90
Configure shell features for persistence
sfmskywalker Feb 8, 2026
6d88720
Remove DatabaseProviderConfigurators and refactor persistence shell f…
sfmskywalker Feb 8, 2026
d829486
Correct IWorkflowDefinitionPublisher registration to use WorkflowDefi…
sfmskywalker Feb 8, 2026
83b9cdd
Add resilience feature and scoped services configuration for Sqlite p…
sfmskywalker Feb 9, 2026
77053de
Add `ResilienceShellFeature` for configuring resilience strategies
sfmskywalker Feb 9, 2026
3296523
Add new shell features: Alterations, Blob Storage, Caching, Clusterin…
sfmskywalker Feb 9, 2026
d750cd6
Switch project references to package references for CShells libraries…
sfmskywalker Feb 9, 2026
2e931a7
Potential fix for pull request finding 'Call to 'System.IO.Path.Combi…
sfmskywalker Feb 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
</PropertyGroup>
<!-- Conditional package versions for .NET 8/9 compatibility -->
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0' or '$(TargetFramework)' == 'net9.0'">
<PackageVersion Include="FastEndpoints" Version="7.0.0"/>
<PackageVersion Include="FastEndpoints.Security" Version="7.0.0"/>
<PackageVersion Include="FastEndpoints.Swagger" Version="7.0.0"/>
<PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="9.0.11"/>
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="9.0.11"/>
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.11"/>
Expand All @@ -31,18 +34,21 @@
<PackageVersion Include="Microsoft.Extensions.Http" Version="9.0.11"/>
<PackageVersion Include="Microsoft.Extensions.Http.Polly" Version="9.0.11"/>
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.10.0"/>
<PackageVersion Include="Microsoft.Extensions.Options" Version="9.0.11"/>
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.11"/>
<PackageVersion Include="Microsoft.Extensions.Resilience" Version="9.10.0"/>
<PackageVersion Include="Microsoft.Extensions.Logging" Version="9.0.11"/>
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.11"/>
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="9.0.11"/>
<PackageVersion Include="Microsoft.Extensions.Options" Version="9.0.11"/>
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.11"/>
<PackageVersion Include="Microsoft.Extensions.Resilience" Version="9.10.0"/>
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4"/>
<PackageVersion Include="Oracle.EntityFrameworkCore" Version="9.23.26000"/>
<PackageVersion Include="Scrutor" Version="6.1.0"/>
</ItemGroup>
<!-- .NET 10 specific package versions -->
<ItemGroup Condition="'$(TargetFramework)' == 'net10.0'">
<PackageVersion Include="FastEndpoints" Version="7.2.0"/>
<PackageVersion Include="FastEndpoints.Security" Version="7.2.0"/>
<PackageVersion Include="FastEndpoints.Swagger" Version="7.2.0"/>
<PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="10.0.1"/>
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="10.0.1"/>
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.1"/>
Expand Down Expand Up @@ -94,14 +100,17 @@
<PackageVersion Include="coverlet.collector" Version="6.0.4" PrivateAssets="All"/>
<PackageVersion Include="coverlet.msbuild" Version="6.0.4" PrivateAssets="All"/>
<PackageVersion Include="Cronos" Version="0.11.1"/>
<PackageVersion Include="CShells" Version="0.0.7"/>
<PackageVersion Include="CShells.Abstractions" Version="0.0.7"/>
<PackageVersion Include="CShells.AspNetCore" Version="0.0.7"/>
<PackageVersion Include="CShells.AspNetCore.Abstractions" Version="0.0.7"/>
<PackageVersion Include="CShells.FastEndpoints" Version="0.0.7"/>
<PackageVersion Include="CShells.FastEndpoints.Abstractions" Version="0.0.7"/>
<PackageVersion Include="Datadog.Trace.Bundle" Version="3.32.0"/>
<PackageVersion Include="DistributedLock" Version="2.7.1"/>
<PackageVersion Include="DistributedLock.Core" Version="1.0.8"/>
<PackageVersion Include="DistributedLock.FileSystem" Version="1.0.3"/>
<PackageVersion Include="Elastic.Clients.Elasticsearch" Version="9.2.2"/>
<PackageVersion Include="FastEndpoints" Version="7.1.1"/>
<PackageVersion Include="FastEndpoints.Security" Version="7.1.1"/>
<PackageVersion Include="FastEndpoints.Swagger" Version="7.1.1"/>
<PackageVersion Include="FluentStorage" Version="6.0.0"/>
<PackageVersion Include="FluentStorage.Azure.Blobs" Version="6.0.0"/>
<PackageVersion Include="Fluid.Core" Version="2.31.0"/>
Expand Down
7 changes: 7 additions & 0 deletions Elsa.sln
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue_templates", "issue_te
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dsl", "dsl", "{477C2416-312D-46AE-BCD6-8FA1FAB43624}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.ModularServer.Web", "src\apps\Elsa.ModularServer.Web\Elsa.ModularServer.Web.csproj", "{E9CA9A0B-6180-4CA7-814C-FA60D1F1B6EC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Resilience.Core.UnitTests", "test\unit\Elsa.Resilience.Core.UnitTests\Elsa.Resilience.Core.UnitTests.csproj", "{B8006D70-1630-43DB-A043-FA89FAC70F37}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Common.UnitTests", "test\unit\Elsa.Common.UnitTests\Elsa.Common.UnitTests.csproj", "{A3C07D5B-2A30-494E-B9BC-4B1594B31ABC}"
Expand Down Expand Up @@ -591,6 +593,10 @@ Global
{2B7FB49D-E4B6-4AD5-981B-3D85B94F6F48}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B7FB49D-E4B6-4AD5-981B-3D85B94F6F48}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B7FB49D-E4B6-4AD5-981B-3D85B94F6F48}.Release|Any CPU.Build.0 = Release|Any CPU
{E9CA9A0B-6180-4CA7-814C-FA60D1F1B6EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E9CA9A0B-6180-4CA7-814C-FA60D1F1B6EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E9CA9A0B-6180-4CA7-814C-FA60D1F1B6EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E9CA9A0B-6180-4CA7-814C-FA60D1F1B6EC}.Release|Any CPU.Build.0 = Release|Any CPU
{B8006D70-1630-43DB-A043-FA89FAC70F37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B8006D70-1630-43DB-A043-FA89FAC70F37}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B8006D70-1630-43DB-A043-FA89FAC70F37}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand Down Expand Up @@ -708,6 +714,7 @@ Global
{2B7FB49D-E4B6-4AD5-981B-3D85B94F6F48} = {B08B4E00-C2AB-48F3-8389-449F42AEF179}
{477C2416-312D-46AE-BCD6-8FA1FAB43624} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{874F5A44-DB06-47AB-A18C-2D13942E0147} = {477C2416-312D-46AE-BCD6-8FA1FAB43624}
{E9CA9A0B-6180-4CA7-814C-FA60D1F1B6EC} = {D92BEAB2-60D6-4BB4-885A-6BA681C6CCF1}
{B8006D70-1630-43DB-A043-FA89FAC70F37} = {18453B51-25EB-4317-A4B3-B10518252E92}
{A3C07D5B-2A30-494E-B9BC-4B1594B31ABC} = {18453B51-25EB-4317-A4B3-B10518252E92}
{8C4F6A2D-1E9F-4B3C-9D8E-7F5A6B4C3D2E} = {1B8D5897-902E-4632-8698-E89CAF3DDF54}
Expand Down
5 changes: 5 additions & 0 deletions NuGet.Config
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,15 @@
<packageSources>
<clear />
<add key="NuGet official package source" value="https://api.nuget.org/v3/index.json" />
<add key="CShells Preview" value="https://f.feedz.io/sfmskywalker/cshells/nuget/index.json" />
</packageSources>
<packageSourceMapping>
<packageSource key="NuGet official package source">
<package pattern="*" />
</packageSource>
<packageSource key="CShells Preview">
<package pattern="CShells" />
<package pattern="CShells.*" />
</packageSource>
</packageSourceMapping>
</configuration>
13 changes: 13 additions & 0 deletions src/apps/Elsa.ModularServer.Web/Elsa.ModularServer.Web.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<ItemGroup>
<PackageReference Include="CShells.AspNetCore"/>
<PackageReference Include="CShells.FastEndpoints"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\modules\Elsa.Identity\Elsa.Identity.csproj" />
<ProjectReference Include="..\..\modules\Elsa.Persistence.EFCore.Sqlite\Elsa.Persistence.EFCore.Sqlite.csproj" />
<ProjectReference Include="..\..\modules\Elsa.Resilience\Elsa.Resilience.csproj" />
<ProjectReference Include="..\..\modules\Elsa.Workflows.Api\Elsa.Workflows.Api.csproj" />
<ProjectReference Include="..\..\modules\Elsa\Elsa.csproj" />
</ItemGroup>
</Project>
3 changes: 3 additions & 0 deletions src/apps/Elsa.ModularServer.Web/FodyWeavers.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait />
</Weavers>
25 changes: 25 additions & 0 deletions src/apps/Elsa.ModularServer.Web/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using CShells.AspNetCore.Configuration;
using CShells.AspNetCore.Extensions;

var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;

// Configure CShells for multi-tenancy with ASP.NET Core integration
// This automatically registers shell-aware authentication and authorization providers
builder.AddShells(shells => shells
.WithWebRouting(options => options.EnablePathRouting = true)
.WithAuthenticationAndAuthorization());
services.AddHealthChecks();

// Add minimal authentication and authorization services in root
// These are required for middleware validation - shells provide the actual configurations
services.AddAuthentication();
services.AddAuthorization();

var app = builder.Build();

app.MapHealthChecks("/");
app.MapShells(); // Sets HttpContext.RequestServices to shell's scoped provider
app.UseAuthentication(); // Runs after MapShells to access shell-specific auth schemes
app.UseAuthorization(); // Runs after MapShells to access shell-specific policies
app.Run();
23 changes: 23 additions & 0 deletions src/apps/Elsa.ModularServer.Web/Properties/launchSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5002",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7293;http://localhost:5002",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
8 changes: 8 additions & 0 deletions src/apps/Elsa.ModularServer.Web/appsettings.Development.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
76 changes: 76 additions & 0 deletions src/apps/Elsa.ModularServer.Web/appsettings.Example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"CShells": {
"Shells": [
{
"Name": "Default",
"Properties": {
"WebRouting": {
"Path": ""
}
},
"Settings": {
"FastEndpoints": {
"GlobalRoutePrefix": "elsa/api"
},
"SqliteWorkflowDefinitionPersistence": {
"ConnectionString": "Data Source=elsa_workflows.db;Cache=Shared",
"DbContextOptions": {
"EnableSensitiveDataLogging": false,
"EnableDetailedErrors": false
}
},
"SqliteWorkflowInstancePersistence": {
"ConnectionString": "Data Source=elsa_workflows.db;Cache=Shared"
},
"SqliteWorkflowRuntimePersistence": {
"ConnectionString": "Data Source=elsa_workflows.db;Cache=Shared"
}
},
"Features": [
"Elsa",
"WorkflowsApi",
"Identity",
"DefaultAuthentication",
"SqliteWorkflowDefinitionPersistence",
"SqliteWorkflowInstancePersistence",
"SqliteWorkflowRuntimePersistence"
]
},
{
"Name": "Tenant1",
"Properties": {
"WebRouting": {
"Path": "tenant1"
}
},
"Settings": {
"FastEndpoints": {
"GlobalRoutePrefix": "api"
},
"SqlServerWorkflowDefinitionPersistence": {
"ConnectionString": "${ConnectionStrings:Tenant1}"
},
"SqlServerWorkflowInstancePersistence": {
"ConnectionString": "${ConnectionStrings:Tenant1}"
}
},
"Features": [
"Elsa",
"WorkflowsApi",
"SqlServerWorkflowDefinitionPersistence",
"SqlServerWorkflowInstancePersistence"
]
}
]
},
"ConnectionStrings": {
"Tenant1": "Server=localhost;Database=ElsaTenant1;Integrated Security=true;TrustServerCertificate=true"
}
}
55 changes: 55 additions & 0 deletions src/apps/Elsa.ModularServer.Web/appsettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"CShells": {
"Shells": [
{
"Name": "Default",
"Properties": {
"WebRouting": {
"Path": "foo"
}
},
"Settings": {
"FastEndpoints": {
"GlobalRoutePrefix": "elsa/api"
},
"SqliteWorkflowDefinitionPersistence": {
"ConnectionString": "Data Source=elsa_workflows.db;Cache=Shared",
"DbContextOptions": {
"EnableSensitiveDataLogging": false,
"EnableDetailedErrors": false
}
},
"SqliteWorkflowInstancePersistence": {
"ConnectionString": "Data Source=elsa_workflows.db;Cache=Shared",
"DbContextOptions": {
"EnableSensitiveDataLogging": false,
"EnableDetailedErrors": false
}
},
"SqliteWorkflowRuntimePersistence": {
"ConnectionString": "Data Source=elsa_workflows.db;Cache=Shared",
"DbContextOptions": {
"EnableSensitiveDataLogging": false,
"EnableDetailedErrors": false
}
}
},
"Features": [
"Elsa",
"WorkflowsApi",
"Identity",
"DefaultAuthentication",
"Resilience",
"SqliteWorkflowPersistence"
]
}
]
}
}
1 change: 0 additions & 1 deletion src/apps/Elsa.Server.Web/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
var identitySection = configuration.GetSection("Identity");
var identityTokenSection = identitySection.GetSection("Tokens");

// Add Elsa services.
services
.AddElsa(elsa =>
{
Expand Down
2 changes: 2 additions & 0 deletions src/common/Elsa.Api.Common/Elsa.Api.Common.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="CShells.AspNetCore.Abstractions" />
<PackageReference Include="CShells.FastEndpoints.Abstractions" />
<PackageReference Include="FastEndpoints" />
<PackageReference Include="FastEndpoints.Security" />
<PackageReference Include="FastEndpoints.Swagger" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using System.Globalization;
using System.Text.Json;
using System.Text.Json.Serialization;
using CShells.FastEndpoints.Contracts;
using Elsa.Workflows;
using FastEndpoints;
using JetBrains.Annotations;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace Elsa.FastEndpointConfigurators;

/// <summary>
/// Configures FastEndpoints with Elsa-specific serialization options.
/// Uses the same serialization settings as <see cref="Elsa.Extensions.WebApplicationExtensions.UseWorkflowsApi"/>.
/// </summary>
[UsedImplicitly]
public class ElsaFastEndpointsConfigurator : IFastEndpointsConfigurator
{
/// <inheritdoc />
public void Configure(Config config)
{
config.Serializer.RequestDeserializer = DeserializeRequestAsync;
config.Serializer.ResponseSerializer = SerializeResponseAsync;

config.Binding.ValueParserFor<DateTimeOffset>(s =>
new(DateTimeOffset.TryParse(s.ToString(), CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out var result), result));
}

private static ValueTask<object?> DeserializeRequestAsync(HttpRequest httpRequest, Type modelType, JsonSerializerContext? serializerContext, CancellationToken cancellationToken)
{
var serializer = httpRequest.HttpContext.RequestServices.GetRequiredService<IApiSerializer>();
var options = serializer.GetOptions();

return serializerContext == null
? JsonSerializer.DeserializeAsync(httpRequest.Body, modelType, options, cancellationToken)
: JsonSerializer.DeserializeAsync(httpRequest.Body, modelType, serializerContext, cancellationToken);
}

private static Task SerializeResponseAsync(HttpResponse httpResponse, object? dto, string contentType, JsonSerializerContext? serializerContext, CancellationToken cancellationToken)
{
var serializer = httpResponse.HttpContext.RequestServices.GetRequiredService<IApiSerializer>();
var options = serializer.GetOptions();

httpResponse.ContentType = contentType;
return serializerContext == null
? JsonSerializer.SerializeAsync(httpResponse.Body, dto, dto?.GetType() ?? typeof(object), options, cancellationToken)
: JsonSerializer.SerializeAsync(httpResponse.Body, dto, dto?.GetType() ?? typeof(object), serializerContext, cancellationToken);
}
}
Loading
Loading