|
9 | 9 | using System.Threading.Tasks;
|
10 | 10 | using JetBrains.Annotations;
|
11 | 11 | using JsonApiDotNetCore.Configuration;
|
| 12 | +using JsonApiDotNetCore.Controllers; |
12 | 13 | using JsonApiDotNetCore.Resources.Annotations;
|
13 | 14 | using JsonApiDotNetCore.Serialization;
|
14 | 15 | using JsonApiDotNetCore.Serialization.Objects;
|
@@ -61,7 +62,7 @@ public async Task InvokeAsync(HttpContext httpContext, IControllerResourceMappin
|
61 | 62 |
|
62 | 63 | httpContext.RegisterJsonApiRequest();
|
63 | 64 | }
|
64 |
| - else if (IsOperationsRequest(routeValues)) |
| 65 | + else if (IsOperationsRequest(httpContext)) |
65 | 66 | {
|
66 | 67 | if (!await ValidateContentTypeHeaderAsync(HeaderConstants.AtomicOperationsMediaType, httpContext, options.SerializerSettings) ||
|
67 | 68 | !await ValidateAcceptHeaderAsync(AtomicOperationsMediaType, httpContext, options.SerializerSettings))
|
@@ -283,11 +284,16 @@ private static bool IsRouteForRelationship(RouteValueDictionary routeValues)
|
283 | 284 | return actionName.EndsWith("Relationship", StringComparison.Ordinal);
|
284 | 285 | }
|
285 | 286 |
|
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 | + } |
291 | 297 |
|
292 | 298 | private static void SetupOperationsRequest(JsonApiRequest request, IJsonApiOptions options, HttpRequest httpRequest)
|
293 | 299 | {
|
|
0 commit comments