public HttpResponseMessage CatalogImage(int id, [FromUri] CatalogImageParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException("param");
            }
            HttpResponseMessage message = new HttpResponseMessage();

            object[] args = new object[6];
            args[0] = id;
            args[1] = param.h;
            args[2] = param.w;
            args[3] = param.i;
            args[4] = param.Mode;
            bool?showDefault = param.ShowDefault;

            args[5] = showDefault.HasValue ? ((object)showDefault.GetValueOrDefault()) : ((object)1);
            string         key  = string.Format("catalogImage[id:{0}][w:{1}][h:{2}][i:{3}][m:{4}][d:{5}]", args);
            ImageCacheItem item = HttpContext.Current.Cache[key] as ImageCacheItem;

            if ((item == null) || Settings.IsCacheDisabled)
            {
                Image catalogImage = ExcursionProvider.GetCatalogImage(id, param.Index);
                if ((catalogImage == null) && (!(showDefault = param.ShowDefault).GetValueOrDefault() && showDefault.HasValue))
                {
                    message.StatusCode = HttpStatusCode.NotFound;
                }
                else
                {
                    ImageFormatter formatter = new ImageFormatter(catalogImage, Pictures.nophoto)
                    {
                        Format = (catalogImage != null) ? ImageFormat.Jpeg : ImageFormat.Png
                    };
                    param.ApplyFormat(formatter);
                    Stream stream = formatter.CreateStream();
                    if (stream != null)
                    {
                        item = ImageCacheItem.Create(stream, formatter.MediaType);
                        HttpContext.Current.Cache.Add(key, item, null, DateTime.Now.AddMinutes(10.0), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
                        message.Content = new StreamContent(stream);
                        message.Content.Headers.ContentType = new MediaTypeHeaderValue(formatter.MediaType);
                    }
                    else
                    {
                        message.StatusCode = HttpStatusCode.NotFound;
                    }
                }
            }
            else
            {
                message.Content = new StreamContent(item.CraeteStream());
                message.Content.Headers.ContentType = new MediaTypeHeaderValue(item.MediaType);
            }
            message.Headers.CacheControl        = new CacheControlHeaderValue();
            message.Headers.CacheControl.Public = true;
            message.Headers.CacheControl.MaxAge = new TimeSpan?(TimeSpan.FromHours(1.0));
            return(message);
        }