@@ -103,25 +103,27 @@ module HttpHandlers =
103
103
ms
104
104
match getMultipartRequestBoundary ctx.Request with
105
105
| Some boundary ->
106
- use ms = copyBodyToMemory( ctx.Request)
107
- let reader = MultipartReader( boundary, ms)
108
- let request = reader |> MultipartRequest.read |> Async.AwaitTask |> Async.RunSynchronously
109
- let results =
110
- request.Operations
111
- |> List.map ( fun op ->
112
- let result =
113
- match op.Variables with
114
- | Some variables ->
115
- let variables = parseVariables Schema.schema ( parseVariableDefinitions op.Query) variables
116
- Schema.executor.AsyncExecute( op.Query, variables = variables, data = root)
117
- | None -> Schema.executor.AsyncExecute( op.Query, data = root)
118
- result |> Async.RunSynchronously |> addRequestType " Multipart" )
119
- match results with
120
- | [ result ] ->
121
- return ! okWithStr ( json result) next ctx
122
- | results ->
123
- let result = JArray.FromObject( List.map json results) .ToString()
124
- return ! okWithStr result next ctx
106
+ return ! task {
107
+ use ms = copyBodyToMemory( ctx.Request)
108
+ let reader = MultipartReader( boundary, ms)
109
+ let! request = reader |> MultipartRequest.read ctx.RequestAborted
110
+ let results =
111
+ request.Operations
112
+ |> List.map ( fun op ->
113
+ let result =
114
+ match op.Variables with
115
+ | Some variables ->
116
+ let variables = parseVariables Schema.schema ( parseVariableDefinitions op.Query) variables
117
+ Schema.executor.AsyncExecute( op.Query, variables = variables, data = root)
118
+ | None -> Schema.executor.AsyncExecute( op.Query, data = root)
119
+ result |> Async.RunSynchronously |> addRequestType " Multipart" )
120
+ match results with
121
+ | [ result ] ->
122
+ return ! okWithStr ( json result) next ctx
123
+ | results ->
124
+ let result = JArray.FromObject( List.map json results). ToString()
125
+ return ! okWithStr result next ctx
126
+ }
125
127
| None ->
126
128
return ! badRequest ( text " Invalid multipart request header: missing boundary value." ) next ctx
127
129
else
@@ -138,24 +140,23 @@ module HttpHandlers =
138
140
| :? string as query -> Some ( query, getVariables ( parseVariableDefinitions query) data)
139
141
| _ -> failwith " Failure deserializing repsonse. Could not read query - it is not stringified in request."
140
142
else None)
141
- match request with
142
- | Some ( query, Some variables) ->
143
- printfn " Received query: %s " query
144
- printfn " Received variables: %A " variables
145
- let query = removeWhitespacesAndLineBreaks query
146
- let result = Schema.executor.AsyncExecute( query, root, variables) |> Async.RunSynchronously |> addRequestType " Classic"
147
- printfn " Result metadata: %A " result.Metadata
148
- return ! okWithStr ( json result) next ctx
149
- | Some ( query, None) ->
150
- printfn " Received query: %s " query
151
- let query = removeWhitespacesAndLineBreaks query
152
- let result = Schema.executor.AsyncExecute( query) |> Async.RunSynchronously |> addRequestType " Classic"
153
- printfn " Result metadata: %A " result.Metadata
154
- return ! okWithStr ( json result) next ctx
155
- | None ->
156
- let result = Schema.executor.AsyncExecute( Introspection.IntrospectionQuery) |> Async.RunSynchronously |> addRequestType " Classic"
157
- printfn " Result metadata: %A " result.Metadata
158
- return ! okWithStr ( json result) next ctx
143
+ let! result = task {
144
+ match request with
145
+ | Some ( query, Some variables) ->
146
+ printfn " Received query: %s " query
147
+ printfn " Received variables: %A " variables
148
+ let query = removeWhitespacesAndLineBreaks query
149
+ return ! Schema.executor.AsyncExecute( query, root, variables)
150
+ | Some ( query, None) ->
151
+ printfn " Received query: %s " query
152
+ let query = removeWhitespacesAndLineBreaks query
153
+ return ! Schema.executor.AsyncExecute( query)
154
+ | None ->
155
+ return ! Schema.executor.AsyncExecute( Introspection.IntrospectionQuery)
156
+ }
157
+ let result = result |> addRequestType " Classic"
158
+ printfn " Result metadata: %A " result.Metadata
159
+ return ! okWithStr ( json result) next ctx
159
160
}
160
161
161
162
let webApp : HttpHandler =
0 commit comments