Asp.Net MVC自定义HttpHandler

1.背景

这次遇到的问题是针对现行的系统的报表功能进行修改。

满足客户在浏览器预览pdf文件内容及打印。(现在都是先下载报表)

现在的浏览器基本都能预览pdf文件,那些老版的浏览器就不考虑了。安装adobe插件也可以。


2.解决方案

在现行系统的基础上,把输出的pdf文件,复制到IIS下,在Response里转向到pdf文件对应的URL,就能满足用户的需求。

对于IIS来说,这个pdf相当于是静态文件了。虽然配置IIS不能列举文件夹,但还是存在保密的问题。

接下来就是拦截pdf的请求,并验证当前用户的权限。

根据以往开发aspx的经验,只需要针对pdf文件添加HttpHandler就行。

下面列举一下遇到的坑。


2.1 StaicFileHandler只能在IIS里使用,pass。

2.2 实现IHttpHandler接口,创建StaticFileHandlerPDF

   在web配置文件的<system.webServer><handlers>下添加HttpHandler的定义

  <add name="StaticFileHandlerPDF" path="*.pdf" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="namespace.StaticFileHandlerPDF" />

2.3 根据2.2的StaticFileHandlerPDF,对pdf的全路径访问时出现IIS错误,如下:

HTTP Error 500.21 - Internal Server Error

Handler "StaticFileHandlerPDF" has a bad module "ManagedPipelineHandler" in its module list

后来发现是应用程序池的模式是classic,改成另一个就好了。

2.4  实现pdf请求的权限验证

因为现行系统的权限信息是存在Session里的,但是运行时发现Session是null。

只要实现接口IRequiresSessionState,就可以取得Session信息。

权限部分省略50字。





猜你喜欢

转载自blog.csdn.net/yunhaicaomei/article/details/56842271