【问题标题】:One .ashx generic handler for all file types?一个适用于所有文件类型的 .ashx 通用处理程序?
【发布时间】:2012-06-08 13:59:54
【问题描述】:

我已经阅读了基本的 MSDN 信息和一些教程。根据我目前所学到的,我已经能够制作两个 .ashx 处理程序,我称之为 ImageHandler.ashx 和 PDFHandler.ashx。它们会按照您的预期进行:分别返回图像或 PDF。对于这两个处理程序,在ProcessRequest 方法中,我将context.Response.ContentType 分别设置为“image/jpeg”和“application/pdf”,然后用context.Response.BinaryWrite(bytes) 写入结果到目前为止,这工作得很好。

但是,我想让用户能够下载任何文件,无论文件类型如何。我真的需要为每种文件类型创建不同的处理程序吗?

我可以只有一个 .ashx 文件,然后有一个基于文件类型的 switch 语句(我可以通过文件名的子字符串得到)?即使我这样做了,那么非标准文件类型(例如 .xyz 文件)呢?在这种情况下,我应该将 content.Response.ContentType 设置为什么?

【问题讨论】:

    标签: c# asp.net httphandler file-type


    【解决方案1】:

    不,您不需要多个处理程序,尤其是如果基本操作相同。是的,您可以使用任何类型的逻辑来决定将响应内容类型设置为什么。对于您不知道的事情,请使用application/octet-stream。您还应该考虑设置“content-disposition”标头,这使您有机会建议是否应将其显示为“内联”(即在浏览器中)或提示下载 - 以及逻辑文件名是什么(而不是一些 ashx 页面)。

    【讨论】:

    • 这正是我所需要的。现在完美运行。
    【解决方案2】:

    你可以设置Content-type: application/octet-stream,让浏览器根据文件扩展名来处理。

    【讨论】:

    • 两个很好的答案,抱歉我只能选择一个。
    • 我认为现在您应该设置安全标头X-Content-Type-Options: nosniff 并为您提供的每种文件类型设置明确的内容类型。
    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多