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

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

            args[4] = showDefault.HasValue ? ((object)showDefault.GetValueOrDefault()) : ((object)1);
            string         key  = string.Format("categoryImage[id:{0}][w:{1}][h:{2}][m:{3}][d:{4}]", args);
            ImageCacheItem item = null;

            if ((item == null) || Settings.IsCacheDisabled)
            {
                Image categoryImage = ExcursionProvider.GetCategoryImage(id);
                if ((categoryImage == null) && (!(showDefault = param.ShowDefault).GetValueOrDefault() && showDefault.HasValue))
                {
                    message.StatusCode = HttpStatusCode.NotFound;
                }
                else
                {
                    ImageFormatter formatter = new ImageFormatter(categoryImage, Pictures.nophoto)
                    {
                        Format = (categoryImage != 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);
                        message.Headers.CacheControl        = new CacheControlHeaderValue();
                        message.Headers.CacheControl.Public = true;
                        message.Headers.CacheControl.MaxAge = new TimeSpan?(TimeSpan.FromHours(1.0));
                    }
                    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);
        }
        public HttpResponseMessage Photo(int id, [FromUri] ImageParam param)
        {
            HttpResponseMessage message   = new HttpResponseMessage();
            ImageFormatter      formatter = new ImageFormatter(GuideProvider.GetGuideImage(id), Pictures.GuideNoPhoto);

            param.ApplyFormat(formatter);
            Stream content = formatter.CreateStream();

            if (content != null)
            {
                message.Content = new StreamContent(content);
                message.Content.Headers.ContentType = new MediaTypeHeaderValue(formatter.MediaType);
                return(message);
            }
            message.StatusCode = HttpStatusCode.NotFound;
            return(message);
        }