我刚刚安装了 ImageResizer.Net 库来测试调整大小功能。我用 nuget 安装了它,几秒钟后它开始运行,但不是我喜欢的方式。我想要一个整洁的 url 重写,/images/{width}/{height}/name.ext
而不是像?width=100&height=200
.
我通过正则表达式实现了它,Application_Start()
但PipelineConfig.Rewrite
想知道什么是最好的解决方案,尤其是在速度方面?
我刚刚安装了 ImageResizer.Net 库来测试调整大小功能。我用 nuget 安装了它,几秒钟后它开始运行,但不是我喜欢的方式。我想要一个整洁的 url 重写,/images/{width}/{height}/name.ext
而不是像?width=100&height=200
.
我通过正则表达式实现了它,Application_Start()
但PipelineConfig.Rewrite
想知道什么是最好的解决方案,尤其是在速度方面?
消除查询字符串可能是当前的时尚,但在您对数据(图像)应用查询/过滤器并且查询词汇量很大的情况下,这往往是一个短视的错误。仔细查看 REST 指南将证实这一点。将图像大小或其他命令放入路径会增加歧义(它是命令还是文件夹?),无法轻松删除(如何仅获取原始图像),并弄脏 URI 的清晰度。
使用查询字符串语法可以轻松构建和修改来自 javascript UI(如StudioJS )的命令,并使您与RIAPI 兼容。
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