在使用某种通配符映射时,如何在IIS中获取If-Modified-Since和If-None-Match标头?

时间:2011-04-28 19:40:05

标签: iis

我有一个图像服务器,它采用

形式的网址
http://www.myserver.com/photo/foo/bar/baz/~120x120/crop/abc123.jpg

并根据从URL字符串解析的参数动态生成缩略图。我们已经在两种配置中运行了这种配置 - 一种是将IIS中的404错误映射到.aspx页面,在代码隐藏中映射图像,第二种是通过实现IHttpHandler并在其中添加一行system.web的{​​{1}}部分如此:

/photo/web.config

我需要为HTTP缓存添加一些支持,但在这两种配置中, IIS正在静默剥离<httpHandlers> <add verb="GET,HEAD" path="*" type="App_Code.ThumbnailHandler" /> </httpHandlers> If-Modified-Since标题 - Fiddler显示浏览器将它们发送到服务器,但是当我的页面或处理程序访问If-None-Match集合时,它们就消失了。

如何使用任何文件扩展名编写一段处理任意通配符URL请求的代码,但如果客户端已经有Request.Headers,我仍然可以访问我需要能够响应的标头当前版本的资源?我接下来要尝试将其重写为MVC应用程序,但这看起来似乎有些过分。

编辑:好的,如果我点击

,那真是太疯狂了
304 Not Modified

(即.ASPX文件扩展名) - 标题是INTACT!但是,如果我点击

http://www.myserver.com/photo/this/is/a/random/string/of/gibberish.aspx

他们错过了......任何想法?

1 个答案:

答案 0 :(得分:0)

我发现的唯一解决方法是如上所述实现IHttpHandler,但是然后将你匹配的每个文件扩展名(在我们的例子中是.JPG,.PNG和.TIF)映射到%windir%\ IIS中的Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll。出于某些奇怪的原因,这意味着IIS将调用您的HTTP处理程序,而不会首先破坏标头。