@@ -68,6 +68,7 @@ public class GraphQLHttpMiddleware : IUserContextBuilder
68
68
private const string VARIABLES_KEY = "variables" ;
69
69
private const string EXTENSIONS_KEY = "extensions" ;
70
70
private const string OPERATION_NAME_KEY = "operationName" ;
71
+ private const string DOCUMENT_ID_KEY = "documentId" ;
71
72
private const string OPERATIONS_KEY = "operations" ; // used for multipart/form-data requests per https://github.com/jaydenseric/graphql-multipart-request-spec
72
73
private const string MAP_KEY = "map" ; // used for multipart/form-data requests per https://github.com/jaydenseric/graphql-multipart-request-spec
73
74
private const string MEDIATYPE_GRAPHQLJSON = "application/graphql+json" ; // deprecated
@@ -199,7 +200,8 @@ protected virtual async Task InvokeAsync(HttpContext context, RequestDelegate ne
199
200
Query = urlGQLRequest ? . Query ?? bodyGQLRequest ? . Query ,
200
201
Variables = urlGQLRequest ? . Variables ?? bodyGQLRequest ? . Variables ,
201
202
Extensions = urlGQLRequest ? . Extensions ?? bodyGQLRequest ? . Extensions ,
202
- OperationName = urlGQLRequest ? . OperationName ?? bodyGQLRequest ? . OperationName
203
+ OperationName = urlGQLRequest ? . OperationName ?? bodyGQLRequest ? . OperationName ,
204
+ DocumentId = urlGQLRequest ? . DocumentId ?? bodyGQLRequest ? . DocumentId ,
203
205
} ;
204
206
205
207
await HandleRequestAsync ( context , next , gqlRequest ) ;
@@ -343,8 +345,8 @@ void ApplyMapToRequests(Dictionary<string, string?[]> map, IFormCollection form,
343
345
foreach ( var entry in map )
344
346
{
345
347
// validate entry key
346
- if ( entry . Key == "" || entry . Key == "query" || entry . Key == "operationName" || entry . Key == "variables" || entry . Key == "extensions" || entry . Key == "operations" || entry . Key == "map" )
347
- throw new InvalidMapError ( "Map key cannot be query, operationName, variables, extensions, operations or map." ) ;
348
+ if ( entry . Key == "" || entry . Key == QUERY_KEY || entry . Key == OPERATION_NAME_KEY || entry . Key == VARIABLES_KEY || entry . Key == EXTENSIONS_KEY || entry . Key == DOCUMENT_ID_KEY || entry . Key == OPERATIONS_KEY || entry . Key == MAP_KEY )
349
+ throw new InvalidMapError ( "Map key cannot be query, operationName, variables, extensions, documentId, operations or map." ) ;
348
350
// locate file
349
351
var file = form . Files [ entry . Key ]
350
352
?? throw new InvalidMapError ( "Map key does not refer to an uploaded file." ) ;
@@ -683,6 +685,7 @@ protected virtual async Task<ExecutionResult> ExecuteRequestAsync(HttpContext co
683
685
Query = request ? . Query ,
684
686
Variables = request ? . Variables ,
685
687
Extensions = request ? . Extensions ,
688
+ DocumentId = request ? . DocumentId ,
686
689
CancellationToken = context . RequestAborted ,
687
690
OperationName = request ? . OperationName ,
688
691
RequestServices = serviceProvider ,
@@ -1212,6 +1215,7 @@ protected virtual Task WriteErrorResponseAsync(HttpContext context, HttpStatusCo
1212
1215
Variables = _options . ReadVariablesFromQueryString && queryCollection . TryGetValue ( VARIABLES_KEY , out var variablesValues ) ? _serializer . Deserialize < Inputs > ( variablesValues [ 0 ] ) : null ,
1213
1216
Extensions = _options . ReadExtensionsFromQueryString && queryCollection . TryGetValue ( EXTENSIONS_KEY , out var extensionsValues ) ? _serializer . Deserialize < Inputs > ( extensionsValues [ 0 ] ) : null ,
1214
1217
OperationName = queryCollection . TryGetValue ( OPERATION_NAME_KEY , out var operationNameValues ) ? operationNameValues [ 0 ] : null ,
1218
+ DocumentId = queryCollection . TryGetValue ( DOCUMENT_ID_KEY , out var documentIdValues ) ? documentIdValues [ 0 ] : null ,
1215
1219
} ;
1216
1220
1217
1221
private GraphQLRequest DeserializeFromFormBody ( IFormCollection formCollection ) => new ( )
@@ -1220,6 +1224,7 @@ protected virtual Task WriteErrorResponseAsync(HttpContext context, HttpStatusCo
1220
1224
Variables = formCollection . TryGetValue ( VARIABLES_KEY , out var variablesValues ) ? _serializer . Deserialize < Inputs > ( variablesValues [ 0 ] ) : null ,
1221
1225
Extensions = formCollection . TryGetValue ( EXTENSIONS_KEY , out var extensionsValues ) ? _serializer . Deserialize < Inputs > ( extensionsValues [ 0 ] ) : null ,
1222
1226
OperationName = formCollection . TryGetValue ( OPERATION_NAME_KEY , out var operationNameValues ) ? operationNameValues [ 0 ] : null ,
1227
+ DocumentId = formCollection . TryGetValue ( DOCUMENT_ID_KEY , out var documentIdValues ) ? documentIdValues [ 0 ] : null ,
1223
1228
} ;
1224
1229
1225
1230
/// <summary>
0 commit comments