Skip to content

Commit 6100f2f

Browse files
author
Bart Koelman
committed
Reduced dependencies
1 parent 839cc58 commit 6100f2f

File tree

7 files changed

+25
-23
lines changed

7 files changed

+25
-23
lines changed

src/JsonApiDotNetCore/Middleware/JsonApiInputFormatter.cs

Lines changed: 4 additions & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 2 additions & 2 deletions
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
}
Lines changed: 6 additions & 3 deletions
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

Lines changed: 2 additions & 5 deletions
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

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,13 @@
1414
using Microsoft.AspNetCore.Http.Extensions;
1515
using Microsoft.AspNetCore.Mvc;
1616
using Microsoft.AspNetCore.Mvc.Formatters;
17+
using Microsoft.AspNetCore.WebUtilities;
1718
using Microsoft.Extensions.Logging;
1819
using Microsoft.Net.Http.Headers;
1920

2021
namespace JsonApiDotNetCore.Serialization
2122
{
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>
23+
/// <inheritdoc />
2624
public sealed class JsonApiWriter : IJsonApiWriter
2725
{
2826
private readonly IJsonApiSerializer _serializer;
@@ -43,21 +41,22 @@ public JsonApiWriter(IJsonApiSerializer serializer, IExceptionHandler exceptionH
4341
_traceWriter = new TraceLogWriter<JsonApiWriter>(loggerFactory);
4442
}
4543

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

5049
using IDisposable _ = CodeTimingSessionManager.Current.Measure("Write response body");
5150

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

55-
await using TextWriter writer = context.WriterFactory(response.Body, Encoding.UTF8);
54+
await using TextWriter writer = new HttpResponseStreamWriter(response.Body, Encoding.UTF8);
5655
string responseContent;
5756

5857
try
5958
{
60-
responseContent = SerializeResponse(context.Object, (HttpStatusCode)response.StatusCode);
59+
responseContent = SerializeResponse(model, (HttpStatusCode)response.StatusCode);
6160
}
6261
#pragma warning disable AV1210 // Catch a specific exception instead of Exception, SystemException or ApplicationException
6362
catch (Exception exception)

test/TestBuildingBlocks/IntegrationTest.cs

Lines changed: 1 addition & 1 deletion
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)