我刚刚安装了ImageResizer.Net库来测试调整大小的功能。我用nuget安装它,几秒钟后它开始运行但不是我喜欢的方式。我想要一个整齐的网址重写,如/images/{width}/{height}/name.ext
,而不是像?width=100&height=200
那样古老而丑陋的查询字符串。
我用Application_Start()
和PipelineConfig.Rewrite
用正则表达式实现了它,但是想知道什么是最好的解决方案,特别是关于速度?
答案 0 :(得分:1)
消除查询字符串可能是当前的时尚,但在您对数据(图像)应用查询/过滤器的情况下,这往往是一个短视的错误,并且您有一个大的查询词汇表。仔细阅读REST指南将证实这一点。将图像大小或其他命令放入路径会增加歧义(是命令还是文件夹?),阻止轻松删除(如何只获取原始图像),并污染URI的清晰度。
使用查询字符串语法可以轻松构建和修改来自StudioJS等javascript UI的命令,并让您RIAPI compliant。
答案 1 :(得分:0)
以下是我在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);
}
};
我在下面使用3.3.3 nuget包:
ImageResizer
ImageResizer.Mvc
ImageResizer.MvcWebConfig
ImageResizer.Plugins.DiskCache
ImageResizer.Plugins.PrettyGifs
ImageResizer.Plugins.SimpleFilters
ImageResizer.WebConfig