我使用哪个IIS模块将二进制文件下载到客户端?
我有一个我无法修改的继承应用程序,它试图将APK文件下载到Android设备。
该应用程序向IIS 7发出POST请求,我已使用MIME文件的MIME类型对其进行了配置。我尝试了“application / octet-stream”和“application / vnd.android.package-archive”。如果我尝试GET请求,两种mime类型都有效。
现在有趣的部分:接受对.apk扩展的POST动词请求,我为StaticFileModule创建了一个模块映射。映射不仅限于文件或目录,接受POST和GET动词,并且需要读访问权。
我假设StaticFileModule允许对任何类型的文件发出请求,IIS会在没有处理的情况下返回文件 - 事实证明这不是真的。
StaticFileModule不返回文件,它只接受请求并返回状态200.GET和POST执行相同的操作。如果我禁用GET请求模块,IIS使用不同的模块,下载适用于GET。但是,如果我禁用POST,则下载不起作用(并且模块未激活),并且我得到了用于访问此页面的405“HTTP动词”。
为什么默认的StaticFile处理程序映射(*)在接受“All verbs”时不允许POST - 并且它对GET请求没有问题 - 但是当我定义自己的处理程序时,它不会发回任何东西对于哪一个动词?
我想补充说,如果我将模块映射更改为仅在请求映射到文件,文件夹或文件或文件夹,模块映射似乎不适用于我的请求。这对我来说没有意义。 我正在使用URL重写,但仅当{REQUEST_FILENAME} 不是文件且不是目录时。重写不适用(它重写为index.php所以我知道它是否确实如此)。
答案 0 :(得分:0)
我最终编写了自己的托管处理程序,因为我还没有在网上找到可行的解决方案。
定义没有帮助StaticFileModule提供APK文件,并且使用这里的优秀指南证明编写我自己的处理程序非常容易:http://www.iis.net/learn/develop/runtime-extensibility/developing-iis-modules-and-handlers-with-the-net-framework
在处理程序内部,我检查文件是否存在,创建一个流,将流写入response.OutputStream以及所有内容。