private async Task <dynamic> ImageInfo(dynamic parameters, CancellationToken token) { try { var filename = parameters.id; var imageUri = new Uri(new Uri(Conf.Location), filename); var requestId = Context.GetOwinEnvironment()["RequestId"] as string; (var maxWidth, var maxHeight, var maxArea) = GetSizeConstraints(Conf); var processor = new ImageProcessing.ImageProcessing { HttpClient = HttpClient, Log = Log }; var metadata = await processor.GetImageInfo(imageUri, Conf.DefaultTileWidth, requestId); var full_id = Conf.BaseUri == null? Request.Url.ToString().Replace("/info.json", "") : string.Format("{0}ark:/{1}/{2}", Conf.BaseUri.ToString(), parameters.naan, parameters.id); var info = new ImageInfo(metadata, Conf, maxWidth, maxHeight, maxArea) { ID = full_id, }; Log.Debug("{@ImageInfo}", info); return(await Negotiate .WithAllowedMediaRange(new MediaRange("application/json")) .WithAllowedMediaRange(new MediaRange("application/ld+json")) .WithHeader("Link", null) // hide nancy automatic Link: rel="alternative" .WithModel(info)); } catch (FileNotFoundException e) { Log.Error("Unable to load source image @{FileName}", e.FileName); return(HttpStatusCode.NotFound); } catch (NotImplementedException e) { Log.Information(e, "Un-implemented feature requested"); return(HttpStatusCode.BadRequest); } catch (ArgumentException e) { Log.Error(e, "Error parsing argument"); return(HttpStatusCode.BadRequest); } catch (Exception e) { Log.Error(e, "Unexpected exception"); return(HttpStatusCode.InternalServerError); } }