【问题标题】:MVC 3 using a custom httphandler with a different extensionMVC 3 使用具有不同扩展名的自定义 httphandler
【发布时间】:2011-05-17 08:45:02
【问题描述】:

你能在 MVC 中创建一个带有自定义扩展的自定义 httphandler 吗?

我想要一个具有以下路径的图像处理程序(如果可能), domain.com/picture/{图片的id}

是否可以从 MVC 内部进行,还是必须在 IIS 7 中进行?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 httphandler


    【解决方案1】:

    无需添加 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-16
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多