public static async Task <HttpResponseMessage> GetResponseAsync(this HttpRequest request)
        {
            try
            {
                if (request == null)
                {
                    throw new ArgumentNullException(nameof(request));
                }

                int parts = Helpers.ParseRoute(
                    request.Path,
                    out string database,
                    out string container,
                    out string partitionKey,
                    out string id,
                    out int maxItemCount);

                return((request.Method.ToLowerInvariant()) switch
                {
                    "get" => await CosmosService.ReadItemStreamAsync(database, container, partitionKey, id),
                    "post" => parts == 4
                        ? await CosmosService.CreateItemStreamAsync(database, container, partitionKey, request.Body)
                        : await CosmosService.GetItemQueryStreamIterator(database, container, partitionKey, request.Body, request.Headers["Continuation-Token"], maxItemCount),
                    "put" => parts == 4
                        ? await CosmosService.UpsertItemStreamAsync(database, container, partitionKey, request.Body)
                        : await CosmosService.ReplaceItemStreamAsync(database, container, partitionKey, id, request.Body),
                    "delete" => await CosmosService.DeleteItemStreamAsync(database, container, partitionKey, id),
                    _ => CosmosService.ErrorResponse("Request method did not match one of the Cosmos API method signatures.")
                });
            }
Ejemplo n.º 2
0
        internal static HttpResponseMessage ConvertHttpResponseMessage(this Response response)
        {
            if (response == null)
            {
                return(CosmosService.ErrorResponse("There was no response from Azure Cosmos."));
            }

            // Would be really nice if we could simply pass the Cosmos response directly back,
            // but, alas, we must reconstruct a return response.
            var result = new HttpResponseMessage();

            // Pass Cosmos response headers back.
            foreach (var headerName in response.Headers)
            {
                result.Headers.Add(headerName.Name, headerName.Value);
            }

            // Pass Cosmos status code back.
            result.StatusCode = (HttpStatusCode)response.Status;

            if (response.ContentStream != null)
            {
                // Pass stream directly to response object, without deserializing.
                result.Content = new StreamContent(response.ContentStream);
            }

            return(result);
        }