Esempio n. 1
0
        public async Task HandleGraphQLHttpRequestAsync(HttpContext httpContext)
        {
            if (httpContext.Request.Path.Value.EndsWith("/schema"))
            {
                await HandleSchemaDocRequestAsync(httpContext);

                return;
            }
            var start      = AppTime.GetTimestamp();
            var gqlHttpReq = await BuildGraphQLHttpRequestAsync(httpContext);

            var reqCtx = gqlHttpReq.RequestContext; //internal request context

            try {
                await Server.ExecuteRequestAsync(gqlHttpReq.RequestContext);
            } catch (Exception exc) {
                gqlHttpReq.RequestContext.AddError(exc);
            }

            // success,  serialize response
            try {
                var httpResp = httpContext.Response;
                httpResp.ContentType = ContentTypeJson;
                var respJson = SerializeResponse(reqCtx.Response);
                await httpResp.WriteAsync(respJson, httpContext.RequestAborted);

                reqCtx.Metrics.HttpRequestDuration = AppTime.GetDuration(start);
            } catch (Exception ex) {
                // this ex is at attempt to write response as json; we try to write it as plain text and return something
                await WriteExceptionsAsTextAsync(httpContext, new[] { ex });
            }
        }
Esempio n. 2
0
 public RequestContext(GraphQLServer server, GraphQLRequest rawRequest, CancellationToken cancellationToken = default,
                       ClaimsPrincipal user = null, RequestQuota quota = null, object httpContext = null)
 {
     Server     = server;
     RawRequest = rawRequest;
     _externalCancellationToken = cancellationToken;
     User           = user;
     HttpContext    = httpContext;
     StartTimestamp = AppTime.GetTimestamp();
     Quota          = quota ?? Server.DefaultRequestQuota ?? new RequestQuota();
     // cancellation tokens, initial implementation of limiting request time by quota
     _cancellationTokenSource = new CancellationTokenSource(Quota.MaxRequestTime);
     _cancellationTokenSource.Token.Register(OnCancelled);
     if (_externalCancellationToken != default)
     {
         _externalCancellationToken.Register(OnExternalTokenCancelled);
     }
 }