diff --git a/src/Examples/JsonApiDotNetCoreExample/Definitions/PassportHooksDefinition.cs b/src/Examples/JsonApiDotNetCoreExample/Definitions/PassportHooksDefinition.cs
index 2e211305ca..4ecc08dec3 100644
--- a/src/Examples/JsonApiDotNetCoreExample/Definitions/PassportHooksDefinition.cs
+++ b/src/Examples/JsonApiDotNetCoreExample/Definitions/PassportHooksDefinition.cs
@@ -32,6 +32,11 @@ public override void BeforeImplicitUpdateRelationship(IRelationshipsDictionary
().ToList().ForEach(kvp => DoesNotTouchLockedPassports(kvp.Value));
}
+ public override IEnumerable OnReturn(HashSet resources, ResourcePipeline pipeline)
+ {
+ return resources.Where(p => !p.IsLocked);
+ }
+
private void DoesNotTouchLockedPassports(IEnumerable resources)
{
foreach (var passport in resources ?? Enumerable.Empty())
diff --git a/src/JsonApiDotNetCore/Hooks/Internal/ResourceHookExecutorFacade.cs b/src/JsonApiDotNetCore/Hooks/Internal/ResourceHookExecutorFacade.cs
index e6e642e564..5b0cd4bccc 100644
--- a/src/JsonApiDotNetCore/Hooks/Internal/ResourceHookExecutorFacade.cs
+++ b/src/JsonApiDotNetCore/Hooks/Internal/ResourceHookExecutorFacade.cs
@@ -125,10 +125,10 @@ public object OnReturnRelationship(object resourceOrResources)
return _resourceHookExecutor.OnReturn(resources, ResourcePipeline.GetRelationship).ToArray();
}
- if (resourceOrResources is IIdentifiable identifiable)
+ if (resourceOrResources is IIdentifiable)
{
- var resources = ToList(identifiable);
- return _resourceHookExecutor.OnReturn(resources, ResourcePipeline.GetRelationship).Single();
+ var resources = ToList((dynamic)resourceOrResources);
+ return Enumerable.SingleOrDefault(_resourceHookExecutor.OnReturn(resources, ResourcePipeline.GetRelationship));
}
return resourceOrResources;
diff --git a/test/JsonApiDotNetCoreExampleTests/Acceptance/ResourceDefinitions/ResourceDefinitionTests.cs b/test/JsonApiDotNetCoreExampleTests/Acceptance/ResourceDefinitions/ResourceDefinitionTests.cs
index ac589aa0a8..fa7b5a36f1 100644
--- a/test/JsonApiDotNetCoreExampleTests/Acceptance/ResourceDefinitions/ResourceDefinitionTests.cs
+++ b/test/JsonApiDotNetCoreExampleTests/Acceptance/ResourceDefinitions/ResourceDefinitionTests.cs
@@ -241,6 +241,29 @@ public async Task Article_Through_Secondary_Endpoint_Is_Hidden()
Assert.DoesNotContain(toBeExcluded, body);
}
+ [Fact]
+ public async Task Passport_Through_Secondary_Endpoint_Is_Hidden()
+ {
+ // Arrange
+ var person = _personFaker.Generate();
+ person.Passport = new Passport(_dbContext) {IsLocked = true};
+
+ _dbContext.People.Add(person);
+ await _dbContext.SaveChangesAsync();
+
+ var route = $"/api/v1/people/{person.Id}/passport";
+
+ // Act
+ var response = await _client.GetAsync(route);
+
+ // Assert
+ var body = await response.Content.ReadAsStringAsync();
+ Assert.True(HttpStatusCode.OK == response.StatusCode, $"{route} returned {response.StatusCode} status code with body: {body}");
+ var document = JsonConvert.DeserializeObject(body);
+ Assert.Null(document.Data);
+
+ }
+
[Fact]
public async Task Tag_Is_Hidden()
{