Skip to content

Commit 4bd8b1f

Browse files
authored
Merge pull request #3 from rachael-ross/feature/Add-Ability-for-Multiple-Actions-on-Atomic-Operations-Controller
fix(Atomic-Operations): Allow additional endpoints on OperationsController
2 parents aa9214b + fc7c10b commit 4bd8b1f

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using System.Threading.Tasks;
1010
using JetBrains.Annotations;
1111
using JsonApiDotNetCore.Configuration;
12+
using JsonApiDotNetCore.Controllers;
1213
using JsonApiDotNetCore.Resources.Annotations;
1314
using JsonApiDotNetCore.Serialization;
1415
using JsonApiDotNetCore.Serialization.Objects;
@@ -61,7 +62,7 @@ public async Task InvokeAsync(HttpContext httpContext, IControllerResourceMappin
6162

6263
httpContext.RegisterJsonApiRequest();
6364
}
64-
else if (IsOperationsRequest(routeValues))
65+
else if (IsOperationsRequest(httpContext))
6566
{
6667
if (!await ValidateContentTypeHeaderAsync(HeaderConstants.AtomicOperationsMediaType, httpContext, options.SerializerSettings) ||
6768
!await ValidateAcceptHeaderAsync(AtomicOperationsMediaType, httpContext, options.SerializerSettings))
@@ -283,11 +284,16 @@ private static bool IsRouteForRelationship(RouteValueDictionary routeValues)
283284
return actionName.EndsWith("Relationship", StringComparison.Ordinal);
284285
}
285286

286-
private static bool IsOperationsRequest(RouteValueDictionary routeValues)
287-
{
288-
string actionName = (string)routeValues["action"];
289-
return actionName == "PostOperations";
290-
}
287+
private static bool IsOperationsRequest(HttpContext httpContext)
288+
{
289+
Endpoint endpoint = httpContext.GetEndpoint();
290+
var controllerActionDescriptor = endpoint?.Metadata.GetMetadata<ControllerActionDescriptor>();
291+
292+
if (controllerActionDescriptor == null)
293+
return false;
294+
295+
return controllerActionDescriptor.ControllerTypeInfo.IsSubclassOf(typeof(BaseJsonApiOperationsController));
296+
}
291297

292298
private static void SetupOperationsRequest(JsonApiRequest request, IJsonApiOptions options, HttpRequest httpRequest)
293299
{

0 commit comments

Comments
 (0)