0

我刚刚安装了 ImageResizer.Net 库来测试调整大小功能。我用 nuget 安装了它,几秒钟后它开始运行,但不是我喜欢的方式。我想要一个整洁的 url 重写,/images/{width}/{height}/name.ext而不是像?width=100&height=200.

我通过正则表达式实现了它,Application_Start()PipelineConfig.Rewrite想知道什么是最好的解决方案,尤其是在速度方面?

4

2 回答 2

1

FriendlyUrls 插件允许这样做,并且可以用作开发您自己的 URL 语法的起点。但是,我们强烈反对这样做,因为默认语法更接近 REST 原则。

消除查询字符串可能是当前的时尚,但在您对数据(图像)应用查询/过滤器并且查询词汇量很大的情况下,这往往是一个短视的错误。仔细查看 REST 指南将证实这一点。将图像大小或其他命令放入路径会增加歧义(它是命令还是文件夹?),无法轻松删除(如何仅获取原始图像),并弄脏 URI 的清晰度。

使用查询字符串语法可以轻松构建和修改来自 javascript UI(如StudioJS )的命令,并使您与RIAPI 兼容

于 2013-07-05T16:49:59.433 回答
0

Here is the code I put into ApplicationStart :

Config.Current.Pipeline.Rewrite += delegate(IHttpModule sender, HttpContext context, IUrlEventArgs ev)
{  
  if (ev.VirtualPath.StartsWith(VirtualPathUtility.ToAbsolute("~/images/"), StringComparison.OrdinalIgnoreCase))
  {
    ev.VirtualPath = Regex.Replace(ev.VirtualPath, @"/images/([0-9]+)/([0-9]+)/([^/]+)\.(jpg|png)", delegate(Match match)
   {
     string v = match.ToString();
     ev.QueryString["width"] = match.Groups[1].Value;
     ev.QueryString["height"] = match.Groups[2].Value;
     //ev.QueryString["scale"] = "both";

     return string.Format("/images/{0}.{1}", match.Groups[3].Value, match.Groups[4].Value);

   });
   context.RewritePath(ev.VirtualPath);
  }
};

And I use 3.3.3 nuget packages below :

ImageResizer 
ImageResizer.Mvc 
ImageResizer.MvcWebConfig 
ImageResizer.Plugins.DiskCache
ImageResizer.Plugins.PrettyGifs
ImageResizer.Plugins.SimpleFilters
ImageResizer.WebConfig
于 2013-07-03T06:35:53.963 回答