コード例 #1
0
        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);
            }
        }