我在网络应用中一直使用ImageResizer.net,但现在我需要它来调整大小并提供没有(也不能)有文件扩展名的图像,如下所示:
http://localhost:58306/ClientImages/Batch/2012/12/10/f45198b7c452466684a4079de8d5f85f?width=600
在这种情况下,我知道我的文件总是TIFF,但是它们没有文件扩展名。
我有什么选择?
/resizer.debug.ashx:https://gist.github.com/raw/9c867823c983f0e5be10/4db31cb21af8b9b36f0aa4e765f6f459ba4b309f/gistfile1.txt
我遵循了计算机语言学家的指示:
protected void Application_Start()
{
Config.Current.Pipeline.PostAuthorizeRequestStart +=
delegate
{
var path = Config.Current.Pipeline.PreRewritePath;
var clientImgsRelPath = PathUtils.ResolveAppRelative("~/ClientImages/");
var isClientImageRequest = path.StartsWith(clientImgsRelPath, StringComparison.OrdinalIgnoreCase);
if (isClientImageRequest)
Config.Current.Pipeline.SkipFileTypeCheck = true;
};
// other app start code here
}
http://localhost:58306/ClientImages/Batch/2012/12/10/92d67b45584144beb5f791aaaf760252?width=600
只响应原始图片而没有调整大小。
这里也有人询问:http://imageresizing.net/docs/howto/cache-non-images#comment-571615564
在使用Cassini或Visual Studio Web服务器进行开发期间或您想要调用它时,会发生这种情况。
答案 0 :(得分:2)
首先,您必须使用IIS7集成模式。经典模式不起作用;它不允许ASP.NET访问无扩展请求
除非您明确说明,否则ImageResizer无法知道无扩展名的网址是图片。
本文档解释:
http://imageresizing.net/docs/howto/cache-non-images
基本上,您最终会在URL上执行逻辑(通常是String.StartsWith),以确定ImageResizer是否应将文件视为图像。
Config.Current.Pipeline.PostAuthorizeRequestStart += delegate(IHttpModule sender, HttpContext context) {
string path = Config.Current.Pipeline.PreRewritePath;
//Skip the file extension check for everything in this folder:
if (path.StartsWith(PathUtils.ResolveAppRelative("~/folder/of/images"),
StringComparison.OrdinalIgnoreCase)){
Config.Current.Pipeline.SkipFileTypeCheck = true;
}
};
您应该在global.asax中的Application_Start中注册此事件处理程序。