如何拦截所有获取请求并根据请求的URL重定向

时间:2014-03-13 13:16:55

标签: c# asp.net

在我的c#web应用程序中,我需要拦截所有传入请求(get)以测试URL 是否包含特定文件名(不是文件类型或扩展名)或字符串,基于此我需要检查用户的身份验证和授权状态以及资源的权限状态,并根据需要将用户重定向到登录状态。我的问题是测试这个的最佳位置是什么? Global.asax,http处理程序,http模块或?

P.S。这是一个繁忙的网站,我也需要考虑性能。安全资源存在于包含公共文档的同一目录中,但只有数据库具有有关公共/私有的访问信息。

谢谢

1 个答案:

答案 0 :(得分:1)

由于您要检查所有请求并且不限于特定的文件扩展名,我建议创建一个HttpModule。这也得到MSDN的支持:

  

HTTP模块的典型用途包括:

     
      
  • 安全性因为您可以检查传入的请求,所以HTTP模块   可以在之前执行自定义身份验证或其他安全检查   调用请求的页面,XML Web服务或处理程序。
  •   

在性能方面,它也是一个不错的选择,因为模块在请求的早期运行。如果用户未获得授权,则他或她将被提前重定向。为了提高性能,您还可以考虑实现某种缓存,这样就不必在每个请求中查询数据库。

有关如何创建模块的演练,请参阅此link

在Global.asax中实施检查也是一种选择,但这会将您的解决方案与此应用程序联系起来。您可以轻松地与其他项目共享该模块。在为此任务创建特定模块时,从设计的角度来看,使用模块也是很好的,并且不要像在Global.asax的BeginRequest方法中那样混合功能。