MVC 3 с использованием пользовательского httphandler с другим расширением - PullRequest
3 голосов
/ 17 мая 2011

Можете ли вы создать собственный httphandler с пользовательским расширением в MVC?

Я хочу обработчик изображения, который имеет следующий путь (если возможно), domain.com/picture/ndomid изображения}

Возможно ли это изнутри MVC или мне нужно сделать это в IIS 7?

1 Ответ

7 голосов
/ 17 мая 2011

Нет необходимости добавлять httphandler. Вы должны сделать это в asp.net MVC через контроллер Пример:

public class PictureController : Controller
{
    public FileResult GetImage(int pictureID)
    {
        byte[] fileContents = null;
        //Get the file here.
        return File(fileContents, "image/jpeg");
    }
}

в global.asax вы можете определить

routes.MapRoute("Picture-GetImage", "picture/{pictureID}",
new { controller = "Picture", action = "GetImage" }

Вы также можете использовать System.Web.Helpers.WebImage помощник или сделать это вручную, например:

public static byte[] ProcessCropResizeImage(string imageurl, Size outputSize)
{
    if (File.Exists(imageurl))
    {
        MemoryStream result = new MemoryStream();
        ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().FirstOrDefault(m => m.MimeType == "image/jpeg");
        if (codec == null)
            throw new ArgumentException(string.Format("Unsupported mimeType specified for encoding ({0})", "image/jpeg"), "encodingMimeType");
        EncoderParameters encoderParams = new EncoderParameters(1);
        encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);
        using (FileStream fs = File.OpenRead(imageurl))
        {
            using (Image image = Image.FromStream(fs))
            {
                using (Bitmap b = new Bitmap(outputSize.Width, outputSize.Height))
                {
                    using (Graphics g = Graphics.FromImage((Image)b))
                    {
                        g.CompositingQuality = CompositingQuality.HighQuality;
                        g.SmoothingMode = SmoothingMode.HighQuality;
                        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                        g.DrawImage(image, 0, 0, outputSize.Width, outputSize.Height);
                        g.DrawImage(image, outputSize.Width, outputSize.Height);
                    }
                    b.Save(result, codec, encoderParams);
                }
            }
        }

        return result.GetBuffer();
    }
    return null;
}
...