【问题标题】:.net HttpHandlers Pass Request Up The Pipeline To IIS6.net HttpHandlers 将请求向上传递到 IIS6
【发布时间】:2011-04-04 14:47:57
【问题描述】:

有没有办法让 Http Handler 将请求通过管道传回 IIS 6 并让它处理请求?

例如,如果我为 verb="(wildcard)" path="(wildcard).txt" 设置了 Http 处理程序

我有一个名为 myunformated.txt 的文件,如果它没有附加查询字符串参数,我希望 IIS 6 将它发送给用户。

有什么想法吗?

【问题讨论】:

    标签: c# .net httphandler


    【解决方案1】:

    您的问题的答案是否定的。这就是 IIS7 的集成管道实现的目标,但它在 IIS6 上不可用。

    在这种特定情况下,使用 context.Response.TransmitFile 可以解决问题,尽管您应该考虑设置响应内容类型、字符集和缓存控制标头,例如:-

    HttpResponse Response = context.Response
    
    Response.ContentType = "text/plain";
    Response.CharSet = "Windows-1252";
    Response.AddFileDependency(filePath);
    
    // Set additional properties to enable caching.
    Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
    Response.Cache.SetCacheability(HttpCacheability.Public);
    Response.Cache.SetValidUntilExpires(true);
    Response.TransmitFile(filePath);
    

    这几乎复制了 IIS 静态内容处理程序将执行的操作。

    【讨论】:

    • 如果 .TransmitFile 的目的是将文件直接写入输出流并避免将其缓冲到内存中,那么缓存结果是否与该目标不一致?
    • @John:不。虽然缓存将使用内存,但它只使用可以轻松节省的内存。如果其他地方需要内存,项目将从缓存中删除到服务器端缓存。在所有内容加载到内存之前,传输不会延迟。
    【解决方案2】:

    为什么不只是:Response.TransmitFile? - 请注意,与 Response.WriteFile 不同,此文件不会加载整个文件。

    您可能希望完全避免它,并让链接指向不同的文件名。这样您就可以从 IIS 中获得所有您想要的东西 - 尤其是恢复下载。

    【讨论】:

    • last-modified 指令之类的呢?
    • 您可以将其作为标题返回,但我明白您为什么要避免它(iis 可以做其他重要的事情)......如何通过使用不同的文件名来完全避免它; )
    猜你喜欢
    • 2011-07-25
    • 2010-09-18
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多