Beispiel #1
0
        protected async override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var id = request.RequestUri.AbsolutePath;

            if (!id.StartsWith(baseRoute, StringComparison.OrdinalIgnoreCase))
            {
                return(await base.SendAsync(request, cancellationToken));
            }

            id = id.Substring(baseRoute.Length);

            var cacheKey = request.RequestUri.PathAndQuery;
            var cached   = await cache?.Get(cacheKey);

            if (cached != null)
            {
                return(new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new ByteArrayContent(cached)
                });
            }

            var target = await LoadImage(id);

            if (target == null)
            {
                return(await base.SendAsync(request, cancellationToken));
            }

            var query  = request.RequestUri.Query;
            var result = string.IsNullOrEmpty(query) ? target : invoker.Invoke(target, query.Substring(1));

            var bytes = GetBytes(result);

            if (bytes != null)
            {
                await cache.Put(cacheKey, bytes);

                return(new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new ByteArrayContent(bytes)
                });
            }

            return(new HttpResponseMessage(HttpStatusCode.InternalServerError));
        }
 public void invoke_url_commands(string instruction, string expected)
 {
     Assert.Equal(this, invoker.Invoke(this, instruction));
     Assert.Equal(expected, Text.ToString());
 }