Skip to content

Commit b73f70a

Browse files
committed
feat: add new middleware Json Body Parser
1 parent 5de8345 commit b73f70a

File tree

6 files changed

+132
-0
lines changed

6 files changed

+132
-0
lines changed

Voxel.MiddyNet.sln

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ApiGatewayProblemDetails",
7777
EndProject
7878
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Voxel.MiddyNet.ApiGatewayProblemDetails", "samples\ApiGatewayProblemDetails\Voxel.MiddyNet.ApiGatewayProblemDetails\Voxel.MiddyNet.ApiGatewayProblemDetails.csproj", "{615A99CC-A3ED-4E42-9A9A-AC29B13B095C}"
7979
EndProject
80+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Voxel.MiddyNet.HttpJsonBodyParserMiddleware.Tests", "test\Voxel.MiddyNet.HttpJsonBodyParserMiddleware.Tests\Voxel.MiddyNet.HttpJsonBodyParserMiddleware.Tests.csproj", "{AD9A0773-EF96-4F4A-890C-337277EDCC2F}"
81+
EndProject
82+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Voxel.MiddyNet.HttpJsonBodyParserMiddleware", "src\Voxel.MiddyNet.HttpJsonBodyParserMiddleware\Voxel.MiddyNet.HttpJsonBodyParserMiddleware.csproj", "{111CB170-E682-498D-9E84-42FFFB66CE36}"
83+
EndProject
8084
Global
8185
GlobalSection(SolutionConfigurationPlatforms) = preSolution
8286
Debug|Any CPU = Debug|Any CPU
@@ -191,6 +195,14 @@ Global
191195
{615A99CC-A3ED-4E42-9A9A-AC29B13B095C}.Debug|Any CPU.Build.0 = Debug|Any CPU
192196
{615A99CC-A3ED-4E42-9A9A-AC29B13B095C}.Release|Any CPU.ActiveCfg = Release|Any CPU
193197
{615A99CC-A3ED-4E42-9A9A-AC29B13B095C}.Release|Any CPU.Build.0 = Release|Any CPU
198+
{AD9A0773-EF96-4F4A-890C-337277EDCC2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
199+
{AD9A0773-EF96-4F4A-890C-337277EDCC2F}.Debug|Any CPU.Build.0 = Debug|Any CPU
200+
{AD9A0773-EF96-4F4A-890C-337277EDCC2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
201+
{AD9A0773-EF96-4F4A-890C-337277EDCC2F}.Release|Any CPU.Build.0 = Release|Any CPU
202+
{111CB170-E682-498D-9E84-42FFFB66CE36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
203+
{111CB170-E682-498D-9E84-42FFFB66CE36}.Debug|Any CPU.Build.0 = Debug|Any CPU
204+
{111CB170-E682-498D-9E84-42FFFB66CE36}.Release|Any CPU.ActiveCfg = Release|Any CPU
205+
{111CB170-E682-498D-9E84-42FFFB66CE36}.Release|Any CPU.Build.0 = Release|Any CPU
194206
EndGlobalSection
195207
GlobalSection(SolutionProperties) = preSolution
196208
HideSolutionNode = FALSE
@@ -228,6 +240,8 @@ Global
228240
{981ECA54-36BC-4B48-AFE6-AD212E6C9DD8} = {202D1DF0-62D6-4006-99DC-BBFBE59428B1}
229241
{1F42DBC9-C1FC-4FC7-A5A0-97B47C410C26} = {B07FEFF7-B407-4792-8C6B-B6D0CC8626D4}
230242
{615A99CC-A3ED-4E42-9A9A-AC29B13B095C} = {1F42DBC9-C1FC-4FC7-A5A0-97B47C410C26}
243+
{AD9A0773-EF96-4F4A-890C-337277EDCC2F} = {202D1DF0-62D6-4006-99DC-BBFBE59428B1}
244+
{111CB170-E682-498D-9E84-42FFFB66CE36} = {202D1DF0-62D6-4006-99DC-BBFBE59428B1}
231245
EndGlobalSection
232246
GlobalSection(ExtensibilityGlobals) = postSolution
233247
SolutionGuid = {EFA347F5-761B-44CF-B6DB-8981387C72B3}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using Amazon.Lambda.APIGatewayEvents;
2+
using Newtonsoft.Json;
3+
using System.Threading.Tasks;
4+
5+
namespace Voxel.MiddyNet.HttpJsonBodyParserMiddleware
6+
{
7+
public class HttpJsonBodyParserMiddleware<T> : ILambdaMiddleware<APIGatewayProxyRequest, APIGatewayProxyResponse>
8+
{
9+
public Task Before(APIGatewayProxyRequest lambdaEvent, MiddyNetContext context)
10+
{
11+
var source = JsonConvert.DeserializeObject<T>(lambdaEvent.Body);
12+
context.AdditionalContext.Add("Body", source);
13+
return Task.CompletedTask;
14+
}
15+
16+
public Task<APIGatewayProxyResponse> After(APIGatewayProxyResponse lambdaResponse, MiddyNetContext context) => Task.FromResult(lambdaResponse);
17+
}
18+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>$(NetCoreTargetVersion)</TargetFramework>
5+
</PropertyGroup>
6+
7+
<ItemGroup>
8+
<PackageReference Include="Amazon.Lambda.APIGatewayEvents" Version="2.4.0" />
9+
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
10+
</ItemGroup>
11+
12+
<ItemGroup>
13+
<ProjectReference Include="..\Voxel.MiddyNet\Voxel.MiddyNet.csproj" />
14+
</ItemGroup>
15+
16+
</Project>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Threading.Tasks;
4+
using Amazon.Lambda.APIGatewayEvents;
5+
using Amazon.Lambda.Core;
6+
using FluentAssertions;
7+
using Newtonsoft.Json;
8+
using NSubstitute;
9+
using Xunit;
10+
11+
namespace Voxel.MiddyNet.HttpJsonBodyParserMiddleware.Tests
12+
{
13+
public class TestObject
14+
{
15+
public string foo { get; }
16+
17+
public TestObject(string foo)
18+
{
19+
this.foo = foo;
20+
}
21+
}
22+
23+
public class HttpJsonBodyParserMiddlewareShould
24+
{
25+
[Fact]
26+
public async Task ProcessTheJsonRequest()
27+
{
28+
var context = new MiddyNetContext(Substitute.For<ILambdaContext>());
29+
var expectation = new TestObject("bar");
30+
var source = JsonConvert.SerializeObject(expectation);
31+
var request = new APIGatewayProxyRequest()
32+
{
33+
Headers = new Dictionary<string, string> { { "Content-Type", "application/json" } },
34+
Body = source
35+
};
36+
var middleware = new HttpJsonBodyParserMiddleware<TestObject>();
37+
await middleware.Before(request, context);
38+
39+
context.AdditionalContext.ContainsKey("Body").Should().BeTrue();
40+
context.AdditionalContext["Body"].Should().BeEquivalentTo(expectation);
41+
}
42+
}
43+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace Voxel.MiddyNet.HttpJsonBodyParserMiddleware.Tests
2+
{
3+
public class TestObject
4+
{
5+
public string foo { get; }
6+
7+
public TestObject(string foo)
8+
{
9+
this.foo = foo;
10+
}
11+
}
12+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>$(NetCoreTargetVersion)</TargetFramework>
5+
<IsPackable>false</IsPackable>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<PackageReference Include="Amazon.Lambda.APIGatewayEvents" Version="2.4.0" />
10+
<PackageReference Include="FluentAssertions" Version="5.10.3" />
11+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
12+
<PackageReference Include="NSubstitute" Version="4.2.2" />
13+
<PackageReference Include="xunit" Version="2.4.1" />
14+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
15+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
16+
<PrivateAssets>all</PrivateAssets>
17+
</PackageReference>
18+
<PackageReference Include="coverlet.collector" Version="1.3.0">
19+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
20+
<PrivateAssets>all</PrivateAssets>
21+
</PackageReference>
22+
</ItemGroup>
23+
24+
<ItemGroup>
25+
<ProjectReference Include="..\..\src\Voxel.MiddyNet.HttpJsonBodyParserMiddleware\Voxel.MiddyNet.HttpJsonBodyParserMiddleware.csproj" />
26+
<ProjectReference Include="..\..\src\Voxel.MiddyNet\Voxel.MiddyNet.csproj" />
27+
</ItemGroup>
28+
29+
</Project>

0 commit comments

Comments
 (0)