Skip to content

Commit 3c511fd

Browse files
author
Bart Koelman
committed
Reduced dependencies
1 parent 839cc58 commit 3c511fd

File tree

7 files changed

+25
-24
lines changed

7 files changed

+25
-24
lines changed

src/JsonApiDotNetCore/Middleware/JsonApiInputFormatter.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ public async Task<InputFormatterResult> ReadAsync(InputFormatterContext context)
2222
ArgumentGuard.NotNull(context, nameof(context));
2323

2424
var reader = context.HttpContext.RequestServices.GetRequiredService<IJsonApiReader>();
25-
return await reader.ReadAsync(context.HttpContext.Request);
25+
26+
object model = await reader.ReadAsync(context.HttpContext.Request);
27+
28+
return model == null ? await InputFormatterResult.NoValueAsync() : await InputFormatterResult.SuccessAsync(model);
2629
}
2730
}
2831
}

src/JsonApiDotNetCore/Middleware/JsonApiOutputFormatter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public async Task WriteAsync(OutputFormatterWriteContext context)
2222
ArgumentGuard.NotNull(context, nameof(context));
2323

2424
var writer = context.HttpContext.RequestServices.GetRequiredService<IJsonApiWriter>();
25-
await writer.WriteAsync(context);
25+
await writer.WriteAsync(context.Object, context.HttpContext);
2626
}
2727
}
2828
}

src/JsonApiDotNetCore/Serialization/IJsonApiReader.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace JsonApiDotNetCore.Serialization
77
{
88
/// <summary>
9-
/// Deserializes the incoming JSON request body and converts it to models, which are passed to controller actions by ASP.NET Core on `FromBody`
9+
/// Deserializes the incoming JSON:API request body and converts it to models, which are passed to controller actions by ASP.NET Core on `FromBody`
1010
/// parameters.
1111
/// </summary>
1212
[PublicAPI]
@@ -15,6 +15,6 @@ public interface IJsonApiReader
1515
/// <summary>
1616
/// Reads an object from the request body.
1717
/// </summary>
18-
Task<InputFormatterResult> ReadAsync(HttpRequest httpRequest);
18+
Task<object> ReadAsync(HttpRequest httpRequest);
1919
}
2020
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
using System.Threading.Tasks;
22
using JetBrains.Annotations;
3-
using Microsoft.AspNetCore.Mvc.Formatters;
3+
using Microsoft.AspNetCore.Http;
44

55
namespace JsonApiDotNetCore.Serialization
66
{
77
/// <summary>
8-
/// Serializes models into the outgoing JSON response body.
8+
/// Serializes ASP.NET models into the outgoing JSON:API response body.
99
/// </summary>
1010
[PublicAPI]
1111
public interface IJsonApiWriter
1212
{
13-
Task WriteAsync(OutputFormatterWriteContext context);
13+
/// <summary>
14+
/// Writes an object to the response body.
15+
/// </summary>
16+
Task WriteAsync(object model, HttpContext httpContext);
1417
}
1518
}

src/JsonApiDotNetCore/Serialization/JsonApiReader.cs

+2-5
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
using JsonApiDotNetCore.Serialization.RequestAdapters;
1313
using Microsoft.AspNetCore.Http;
1414
using Microsoft.AspNetCore.Http.Extensions;
15-
using Microsoft.AspNetCore.Mvc.Formatters;
1615
using Microsoft.Extensions.Logging;
1716

1817
namespace JsonApiDotNetCore.Serialization
@@ -36,14 +35,12 @@ public JsonApiReader(IJsonApiOptions options, IDocumentAdapter documentAdapter,
3635
}
3736

3837
/// <inheritdoc />
39-
public async Task<InputFormatterResult> ReadAsync(HttpRequest httpRequest)
38+
public async Task<object> ReadAsync(HttpRequest httpRequest)
4039
{
4140
ArgumentGuard.NotNull(httpRequest, nameof(httpRequest));
4241

4342
string requestBody = await GetRequestBodyAsync(httpRequest);
44-
object model = GetModel(requestBody);
45-
46-
return model == null ? await InputFormatterResult.NoValueAsync() : await InputFormatterResult.SuccessAsync(model);
43+
return GetModel(requestBody);
4744
}
4845

4946
private async Task<string> GetRequestBodyAsync(HttpRequest httpRequest)

src/JsonApiDotNetCore/Serialization/JsonApiWriter.cs

+9-11
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,13 @@
1313
using Microsoft.AspNetCore.Http;
1414
using Microsoft.AspNetCore.Http.Extensions;
1515
using Microsoft.AspNetCore.Mvc;
16-
using Microsoft.AspNetCore.Mvc.Formatters;
16+
using Microsoft.AspNetCore.WebUtilities;
1717
using Microsoft.Extensions.Logging;
1818
using Microsoft.Net.Http.Headers;
1919

2020
namespace JsonApiDotNetCore.Serialization
2121
{
22-
/// <summary>
23-
/// Formats the response data used (see https://docs.microsoft.com/en-us/aspnet/core/web-api/advanced/formatting?view=aspnetcore-3.0). It was intended to
24-
/// have as little dependencies as possible in formatting layer for greater extensibility.
25-
/// </summary>
22+
/// <inheritdoc />
2623
public sealed class JsonApiWriter : IJsonApiWriter
2724
{
2825
private readonly IJsonApiSerializer _serializer;
@@ -43,21 +40,22 @@ public JsonApiWriter(IJsonApiSerializer serializer, IExceptionHandler exceptionH
4340
_traceWriter = new TraceLogWriter<JsonApiWriter>(loggerFactory);
4441
}
4542

46-
public async Task WriteAsync(OutputFormatterWriteContext context)
43+
/// <inheritdoc />
44+
public async Task WriteAsync(object model, HttpContext httpContext)
4745
{
48-
ArgumentGuard.NotNull(context, nameof(context));
46+
ArgumentGuard.NotNull(httpContext, nameof(httpContext));
4947

5048
using IDisposable _ = CodeTimingSessionManager.Current.Measure("Write response body");
5149

52-
HttpRequest request = context.HttpContext.Request;
53-
HttpResponse response = context.HttpContext.Response;
50+
HttpRequest request = httpContext.Request;
51+
HttpResponse response = httpContext.Response;
5452

55-
await using TextWriter writer = context.WriterFactory(response.Body, Encoding.UTF8);
53+
await using TextWriter writer = new HttpResponseStreamWriter(response.Body, Encoding.UTF8);
5654
string responseContent;
5755

5856
try
5957
{
60-
responseContent = SerializeResponse(context.Object, (HttpStatusCode)response.StatusCode);
58+
responseContent = SerializeResponse(model, (HttpStatusCode)response.StatusCode);
6159
}
6260
#pragma warning disable AV1210 // Catch a specific exception instead of Exception, SystemException or ApplicationException
6361
catch (Exception exception)

test/TestBuildingBlocks/IntegrationTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
namespace TestBuildingBlocks
1010
{
1111
/// <summary>
12-
/// A base class for tests that conveniently enables to execute HTTP requests against json:api endpoints.
12+
/// A base class for tests that conveniently enables to execute HTTP requests against JSON:API endpoints.
1313
/// </summary>
1414
public abstract class IntegrationTest
1515
{

0 commit comments

Comments
 (0)