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()); }