Asp.net MVC-从请求的URL获取调整大小的图像得到404错误

时间:2015-01-23 20:30:50

标签: c# asp.net-mvc http-status-code-404

我在图像文件夹中的服务器中有一些图像文件 当URL中请求的图像不存在时,我想获得调整大小的图像版本 我有wirtten代码来重新调整原始图像的大小。
但是当我从url发送请求时,我不知道如何执行此操作,例如
当我输入http://example.com/Image/a_140_140.jpg时,如果有名称的文件a.jpg使用我的代码创建一个名为a_140_140.jpg的已调整大小的图像并将其返回给客户端。
但现在我得到404 Error
请帮助我如何做这项工作永远不会得到404错误。

我不会在我的应用中添加更多路线

2 个答案:

答案 0 :(得分:2)

您可以尝试在IIS中使用404错误转发吗?

答案 1 :(得分:2)

我提供使用以下解决方案:
我使用Asp.net MVC但是通过一些更改,您可以将其用于每个网站  1.将以下行添加到web.config

  <httpErrors>
     <remove statusCode="404" />
  <error statusCode="404" path="/Home/Http404/" responseMode="ExecuteURL" />
  </httpErrors>

2。将此路由添加到Routeconfig.cs

       routes.MapRoute(
            "404-PageNotFound",
            "{*url}",
            new { controller = "Home", action = "Http404" });

3。对于控制器代码,请使用以下代码:

 [MySite.WebUI.Infrastructure.AjaxCrawlable]
        public ActionResult Index()
        {
            string url = Request.Url.AbsolutePath;
            if (url.LastIndexOf('.') != -1)
            {
                string extention = url.Substring(url.LastIndexOf('.') + 1).ToLower();
                var extentionList = new string[] { "jpg", "png", "gif", "tif" };
                if (extentionList.Contains(extention))
                {
                    try
                    {
                        string path = System.Web.Hosting.HostingEnvironment.MapPath(Request.Url.AbsolutePath);
                        string FileName = System.IO.Path.GetFileNameWithoutExtension(path);
                        string extentionnow = System.IO.Path.GetExtension(path);
                        var _mainpath = Request.Url.AbsolutePath.Substring(0, Request.Url.AbsolutePath.LastIndexOf("/"));
                        string _mainfileName = FileName.Substring(0, (FileName.LastIndexOf('_')));
                        int _imagesize = int.Parse(FileName.Substring((FileName.LastIndexOf('_') + 1)));
                        if (_imagesize != null || _imagesize != 0)
                        {
                            var t = Resize.FindResizeImage("~" + _mainpath + "/" + _mainfileName + extentionnow, _imagesize);
                            return new RedirectResult(Request.Url.AbsolutePath);
                        }
                    }
                    catch
                    {
                        return View();
                    }

                }
            }
            else
                return View();
            return View();
        }
  1. 添加此类以调整图片大小
  2.     使用系统;     使用System.Collections.Generic;     使用System.Drawing;     使用System.Drawing.Drawing2D;     使用System.IO;     使用System.Linq;     使用System.Web;     使用System.Web.Mvc;

    namespace MySite.WebUI.Models
    {
        public static class Resize
        {
            public static string FindResizeImage(string path, int size)
            {
    
                var _serverpath = HttpContext.Current.Server.MapPath(path);
                if (System.IO.File.Exists(_serverpath))
                {
                    var Extention = Path.GetExtension(path);
                    var _pathresize = path.Substring(0, path.LastIndexOf(".")) + "_" + size.ToString() + Extention;
                    var _serverpathresize = HttpContext.Current.Server.MapPath(_pathresize);
    
                    if (System.IO.File.Exists(_serverpathresize))
                    {
                        return _pathresize.Substring(1, _pathresize.Length - 1);
                    }
                    else
                    {
                        Resize.Resizeing(HttpContext.Current.Server.MapPath(path), HttpContext.Current.Server.MapPath(_pathresize), size);
                        return _pathresize;
                    }
                }
                return null;
            }
            public static void Resizeing(string imageFile, string outputFile, int size)
            {
                using (var srcImage = Image.FromFile(imageFile))
                {
                    using (var newImage = new Bitmap(size, size))
                    using (var graphics = Graphics.FromImage(newImage))
                    {
                        graphics.SmoothingMode = SmoothingMode.AntiAlias;
                        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                        graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
                        graphics.DrawImage(srcImage, new Rectangle(0, 0, size, size));
                        newImage.Save(outputFile);
                    }
                }
            }
        }
    }