private async Task ProcessBulkRequest(HttpContext context, RpcRequestPackage requestPackage, string s) { var path = context.Request.Path.Value.Substring(_route.Length).TrimEnd('/'); var returnList = new List <ResponseMessage>(); foreach (var request in requestPackage.Requests) { returnList.Add(await ProcessIndividualRequest(context, context.RequestServices, path, request)); } try { SerializeToResponseBody(context, requestPackage.Serializer, returnList, _configuration.Value.SupportResponseCompression); } catch (Exception exp) { _logger?.LogError(EventIdCode.DeserializeException, exp, "Exception thrown while serializing bulk output: " + exp.Message); WriteErrorMessage(context, requestPackage.Serializer, new ErrorResponseMessage(JsonRpcErrorCode.InternalServerError, "Internal Server Error")); } }
public Task ProcessRequest(HttpContext context) { RpcRequestPackage requestPackage = null; if (_debugLogging) { _logger?.LogInformation(new EventId(10), $"Processing json-rpc request for path {context.Request.Path}"); } context.Response.StatusCode = StatusCodes.Status200OK; var path = context.Request.Path.Value.Substring(_route.Length).TrimEnd('/'); Stream body = context.Request.Body; try { if (_configuration.Value.SupportRequestCompression && context.Request.Headers.TryGetValue("Content-Encoding", out var encoding)) { var encoder = _contentEncodingProvider.GetContentEncoder(encoding.ToString()); if (encoder == null) { // write error } else { body = encoder.DecodeStream(body); } } requestPackage = DeserializeStream(context, body, path); } catch (Exception exp) { return(ProcessRequestSerizliationErrorHandler(context, _defaultSerializer, exp)); } finally { if (body != context.Request.Body) { body.Dispose(); } } if (requestPackage != null) { if (requestPackage.IsBulk) { return(ProcessBulkRequest(context, requestPackage, path)); } var message = requestPackage.Requests.First(); if (message.Parameters != null) { return(ProcessRequest(context, requestPackage.Serializer, requestPackage.Requests.First(), path)); } WriteErrorMessage(context, _defaultSerializer, new ErrorResponseMessage(JsonRpcErrorCode.MethodNotFound, "Count not find method " + message.Method)); return(Task.CompletedTask); } WriteErrorMessage(context, _defaultSerializer, new ErrorResponseMessage(JsonRpcErrorCode.InvalidRequest, "Could not parse request")); return(Task.CompletedTask); }