Esempio n. 1
0
        private Response HandleApiRequest(ApiRequest apiRequest, string requestData)
        {
            var parameters = apiRequest.Parameters;

            // If this was a POST request, the request data itself contains parameters.
            if (!string.IsNullOrWhiteSpace(requestData))
            {
                var paramStrings = requestData.Split('&');
                foreach (var parts in paramStrings.Select(p => p.Split('=')))
                {
                    parameters[parts[0]] = Uri.UnescapeDataString(parts[1].Replace('+', ' '));
                }
            }

            var rawResult = _operationRegistry.InvokeCommand(apiRequest.CommandName, parameters);

            if (rawResult == null)
            {
                return new Response(new JsonString(""));
            }
            else
            {
                if (rawResult is Image)   // Image generates a png
                {
                    var memoryStream = new MemoryStream();
                    ((Image)rawResult).SaveBmp(memoryStream);
                    memoryStream.Position = 0;

                    return new Response(new TypedStream(memoryStream, "image/png"));
                }
                else if (rawResult is ITypedStream)
                {
                    return new Response((ITypedStream)rawResult);
                }
                else        // Otherwise, return a json-serialized version
                {
                    string result = JsonSerializer.Serialize(rawResult);
                    return new Response(new JsonString(result));
                }
            }
        }
Esempio n. 2
0
        private ApiRequest ParseApiUrl(Uri url)
        {
            var result = new ApiRequest
            {
                Parameters = new Dictionary<string, string>(),
                CommandName = url.AbsolutePath.Substring("/api/".Length)
            };

            if (!string.IsNullOrEmpty(url.Query))
            {
                var paramStrings = url.Query.Substring(1).Split('&');
                foreach (var parts in paramStrings.Select(p => p.Split('=')))
                {
                    result.Parameters[parts[0]] = Uri.UnescapeDataString(parts[1].Replace('+', ' '));
                }
            }
            return result;
        }