2016-12-17 46 views
0

从IIS 7.5服务器上运行的ASP.NET/C# Web应用程序下载文件时,如何拦截正在响应中下载的PDF文件?该响应具有的application/pdfContent-Length10091使用http模块或http处理程序拦截C#中的文件下载?

目前,我已经写了HttpModule重写方法:

public void Init(HttpApplication context){ 
    context.BeginRequest+=Context_BeginRequest(); 
    context.EndRequest+=Context_EndRequest(); 

} 

private void Begin_Request(Object sender, EventArgs e){ 
    // this function does not get called when downloading a file! 
} 


private void End_Request(Object sender, EventArgs e){ 
    // this function does not get called when downloading a file! 
} 

哪些功能,我需要以截取文件下载响应,覆盖?

的web.config文件看起来像:

<system.webServer> 
<modules runallManagedModulesForAllRequests="true"> 

    <add name="MyMod.Module" type="MyMod.Module"/> 
</modules> 

</system.webServer> 
+0

你注册了模块吗? – Crowcoder

+0

是的,该模块已注册,因为这两个功能都是在普通网络流量(即查看网页)上调用的。但是当我尝试下载文件的时候,这两个函数都没有被调用。 – user1068636

+0

我不是这个级别的专家,但可能对该文件类型或所有静态文件的请求不通过aspnet管道。 – Crowcoder

回答

0

你不告诉你如何注册你的web.config中的模块,但如果它看起来像这样:

<system.webServer> 
    <modules> 
    <add name="mymodule" type="typename, assemblyname" preCondition="managedHandler" /> 
    </modules> 
</system.webServer> 

然后你只需要删除precondition属性。否则,您的模块将不会被调用静态文件(以及其他任何可能不会调用管理管道的文件)。

+0

没有先决条件。我更新了什么我的web.config看起来像 – user1068636

+0

我希望你现在已经解决了这个问题,但我怀疑我需要更多关于你在做什么的信息。一般来说,我概述的方法应该可行。 您可能可以运行失败的请求跟踪模块来追踪IIS实际正在执行的操作。 – Jason