Skip to content

Commit 2dcf65d

Browse files
committed
Move [FromBody] back on base controllers, to prevent a breaking change
1 parent 7e864a2 commit 2dcf65d

File tree

4 files changed

+13
-12
lines changed

4 files changed

+13
-12
lines changed

Diff for: src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs

+6-5
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ public virtual async Task<IActionResult> GetRelationshipAsync(TId id, string rel
185185
/// POST /articles HTTP/1.1
186186
/// ]]></code>
187187
/// </summary>
188-
public virtual async Task<IActionResult> PostAsync(TResource resource, CancellationToken cancellationToken)
188+
public virtual async Task<IActionResult> PostAsync([FromBody] TResource resource, CancellationToken cancellationToken)
189189
{
190190
_traceWriter.LogMethodStart(new
191191
{
@@ -235,7 +235,7 @@ public virtual async Task<IActionResult> PostAsync(TResource resource, Cancellat
235235
/// <param name="cancellationToken">
236236
/// Propagates notification that request handling should be canceled.
237237
/// </param>
238-
public virtual async Task<IActionResult> PostRelationshipAsync(TId id, string relationshipName, ISet<IIdentifiable> rightResourceIds,
238+
public virtual async Task<IActionResult> PostRelationshipAsync(TId id, string relationshipName, [FromBody] ISet<IIdentifiable> rightResourceIds,
239239
CancellationToken cancellationToken)
240240
{
241241
_traceWriter.LogMethodStart(new
@@ -264,7 +264,7 @@ public virtual async Task<IActionResult> PostRelationshipAsync(TId id, string re
264264
/// PATCH /articles/1 HTTP/1.1
265265
/// ]]></code>
266266
/// </summary>
267-
public virtual async Task<IActionResult> PatchAsync(TId id, TResource resource, CancellationToken cancellationToken)
267+
public virtual async Task<IActionResult> PatchAsync(TId id, [FromBody] TResource resource, CancellationToken cancellationToken)
268268
{
269269
_traceWriter.LogMethodStart(new
270270
{
@@ -310,7 +310,8 @@ public virtual async Task<IActionResult> PatchAsync(TId id, TResource resource,
310310
/// <param name="cancellationToken">
311311
/// Propagates notification that request handling should be canceled.
312312
/// </param>
313-
public virtual async Task<IActionResult> PatchRelationshipAsync(TId id, string relationshipName, object? rightValue, CancellationToken cancellationToken)
313+
public virtual async Task<IActionResult> PatchRelationshipAsync(TId id, string relationshipName, [FromBody] object? rightValue,
314+
CancellationToken cancellationToken)
314315
{
315316
_traceWriter.LogMethodStart(new
316317
{
@@ -370,7 +371,7 @@ public virtual async Task<IActionResult> DeleteAsync(TId id, CancellationToken c
370371
/// <param name="cancellationToken">
371372
/// Propagates notification that request handling should be canceled.
372373
/// </param>
373-
public virtual async Task<IActionResult> DeleteRelationshipAsync(TId id, string relationshipName, ISet<IIdentifiable> rightResourceIds,
374+
public virtual async Task<IActionResult> DeleteRelationshipAsync(TId id, string relationshipName, [FromBody] ISet<IIdentifiable> rightResourceIds,
374375
CancellationToken cancellationToken)
375376
{
376377
_traceWriter.LogMethodStart(new

Diff for: src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ protected BaseJsonApiOperationsController(IJsonApiOptions options, IResourceGrap
102102
/// }
103103
/// ]]></code>
104104
/// </example>
105-
public virtual async Task<IActionResult> PostOperationsAsync(IList<OperationContainer> operations, CancellationToken cancellationToken)
105+
public virtual async Task<IActionResult> PostOperationsAsync([FromBody] IList<OperationContainer> operations, CancellationToken cancellationToken)
106106
{
107107
_traceWriter.LogMethodStart(new
108108
{

Diff for: src/JsonApiDotNetCore/Controllers/JsonApiController.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -73,30 +73,30 @@ public override Task<IActionResult> GetRelationshipAsync([Required] TId id, [Req
7373

7474
/// <inheritdoc />
7575
[HttpPost]
76-
public override Task<IActionResult> PostAsync([FromBody] [Required] TResource resource, CancellationToken cancellationToken)
76+
public override Task<IActionResult> PostAsync([Required] TResource resource, CancellationToken cancellationToken)
7777
{
7878
return base.PostAsync(resource, cancellationToken);
7979
}
8080

8181
/// <inheritdoc />
8282
[HttpPost("{id}/relationships/{relationshipName}")]
8383
public override Task<IActionResult> PostRelationshipAsync([Required] TId id, [Required] string relationshipName,
84-
[FromBody] [Required] ISet<IIdentifiable> rightResourceIds, CancellationToken cancellationToken)
84+
[Required] ISet<IIdentifiable> rightResourceIds, CancellationToken cancellationToken)
8585
{
8686
return base.PostRelationshipAsync(id, relationshipName, rightResourceIds, cancellationToken);
8787
}
8888

8989
/// <inheritdoc />
9090
[HttpPatch("{id}")]
91-
public override Task<IActionResult> PatchAsync([Required] TId id, [FromBody] [Required] TResource resource, CancellationToken cancellationToken)
91+
public override Task<IActionResult> PatchAsync([Required] TId id, [Required] TResource resource, CancellationToken cancellationToken)
9292
{
9393
return base.PatchAsync(id, resource, cancellationToken);
9494
}
9595

9696
/// <inheritdoc />
9797
[HttpPatch("{id}/relationships/{relationshipName}")]
9898
// Parameter `[Required] object? rightValue` makes Swashbuckle generate the OpenAPI request body as required. We don't actually validate ModelState, so it doesn't hurt.
99-
public override Task<IActionResult> PatchRelationshipAsync([Required] TId id, [Required] string relationshipName, [FromBody] [Required] object? rightValue,
99+
public override Task<IActionResult> PatchRelationshipAsync([Required] TId id, [Required] string relationshipName, [Required] object? rightValue,
100100
CancellationToken cancellationToken)
101101
{
102102
return base.PatchRelationshipAsync(id, relationshipName, rightValue, cancellationToken);
@@ -112,7 +112,7 @@ public override Task<IActionResult> DeleteAsync([Required] TId id, CancellationT
112112
/// <inheritdoc />
113113
[HttpDelete("{id}/relationships/{relationshipName}")]
114114
public override Task<IActionResult> DeleteRelationshipAsync([Required] TId id, [Required] string relationshipName,
115-
[FromBody] [Required] ISet<IIdentifiable> rightResourceIds, CancellationToken cancellationToken)
115+
[Required] ISet<IIdentifiable> rightResourceIds, CancellationToken cancellationToken)
116116
{
117117
return base.DeleteRelationshipAsync(id, relationshipName, rightResourceIds, cancellationToken);
118118
}

Diff for: src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public abstract class JsonApiOperationsController(
1818
{
1919
/// <inheritdoc />
2020
[HttpPost]
21-
public override Task<IActionResult> PostOperationsAsync([FromBody] [Required] IList<OperationContainer> operations, CancellationToken cancellationToken)
21+
public override Task<IActionResult> PostOperationsAsync([Required] IList<OperationContainer> operations, CancellationToken cancellationToken)
2222
{
2323
return base.PostOperationsAsync(operations, cancellationToken);
2424
}

0 commit comments

Comments
 (0)