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字。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值