@@ -21,20 +21,20 @@ namespace JsonApiDotNetCore.Serialization
21
21
public class JsonApiReader : IJsonApiReader
22
22
{
23
23
private readonly IJsonApiDeserializer _deserializer ;
24
- private readonly IJsonApiRequest _jsonApiRequest ;
24
+ private readonly IJsonApiRequest _request ;
25
25
private readonly IResourceContextProvider _resourceContextProvider ;
26
26
private readonly TraceLogWriter < JsonApiReader > _traceWriter ;
27
27
28
28
public JsonApiReader ( IJsonApiDeserializer deserializer ,
29
- IJsonApiRequest jsonApiRequest ,
29
+ IJsonApiRequest request ,
30
30
IResourceContextProvider resourceContextProvider ,
31
31
ILoggerFactory loggerFactory )
32
32
{
33
33
if ( loggerFactory == null ) throw new ArgumentNullException ( nameof ( loggerFactory ) ) ;
34
34
35
35
_deserializer = deserializer ?? throw new ArgumentNullException ( nameof ( deserializer ) ) ;
36
- _jsonApiRequest = jsonApiRequest ?? throw new ArgumentNullException ( nameof ( jsonApiRequest ) ) ;
37
- _resourceContextProvider = resourceContextProvider ;
36
+ _request = request ?? throw new ArgumentNullException ( nameof ( request ) ) ;
37
+ _resourceContextProvider = resourceContextProvider ?? throw new ArgumentNullException ( nameof ( resourceContextProvider ) ) ;
38
38
_traceWriter = new TraceLogWriter < JsonApiReader > ( loggerFactory ) ;
39
39
}
40
40
@@ -80,14 +80,18 @@ private void ValidateIncomingResourceType(InputFormatterContext context, object
80
80
{
81
81
if ( context . HttpContext . IsJsonApiRequest ( ) && IsPatchOrPostRequest ( context . HttpContext . Request ) )
82
82
{
83
- var endPointResourceType = GetEndpointResourceType ( ) ;
83
+ var endpointResourceType = GetEndpointResourceType ( ) ;
84
+ if ( endpointResourceType == null )
85
+ {
86
+ return ;
87
+ }
88
+
84
89
var bodyResourceTypes = GetBodyResourceTypes ( model ) ;
85
-
86
90
foreach ( var bodyResourceType in bodyResourceTypes )
87
91
{
88
- if ( bodyResourceType != null && endPointResourceType != null && bodyResourceType != endPointResourceType )
92
+ if ( bodyResourceType != endpointResourceType )
89
93
{
90
- var resourceFromEndpoint = _resourceContextProvider . GetResourceContext ( endPointResourceType ) ;
94
+ var resourceFromEndpoint = _resourceContextProvider . GetResourceContext ( endpointResourceType ) ;
91
95
var resourceFromBody = _resourceContextProvider . GetResourceContext ( bodyResourceType ) ;
92
96
93
97
throw new ResourceTypeMismatchException ( new HttpMethod ( context . HttpContext . Request . Method ) ,
@@ -108,9 +112,9 @@ private void ValidatePatchRequestIncludesId(InputFormatterContext context, objec
108
112
throw new InvalidRequestBodyException ( "Payload must include 'id' element." , null , body ) ;
109
113
}
110
114
111
- if ( _jsonApiRequest . Kind == EndpointKind . Primary && TryGetId ( model , out var bodyId ) && bodyId != _jsonApiRequest . PrimaryId )
115
+ if ( _request . Kind == EndpointKind . Primary && TryGetId ( model , out var bodyId ) && bodyId != _request . PrimaryId )
112
116
{
113
- throw new ResourceIdMismatchException ( bodyId , _jsonApiRequest . PrimaryId , context . HttpContext . Request . GetDisplayUrl ( ) ) ;
117
+ throw new ResourceIdMismatchException ( bodyId , _request . PrimaryId , context . HttpContext . Request . GetDisplayUrl ( ) ) ;
114
118
}
115
119
}
116
120
}
@@ -184,9 +188,9 @@ private IEnumerable<Type> GetBodyResourceTypes(object model)
184
188
185
189
private Type GetEndpointResourceType ( )
186
190
{
187
- return _jsonApiRequest . Kind == EndpointKind . Primary
188
- ? _jsonApiRequest . PrimaryResource . ResourceType
189
- : _jsonApiRequest . SecondaryResource ? . ResourceType ;
191
+ return _request . Kind == EndpointKind . Primary
192
+ ? _request . PrimaryResource . ResourceType
193
+ : _request . SecondaryResource ? . ResourceType ;
190
194
}
191
195
}
192
196
}
0 commit comments