如何拦截所有get请求并根据请求的url进行重定向

本文关键字:请求 url 重定向 何拦截 get | 更新日期: 2023-09-27 17:50:08

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

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

谢谢

如何拦截所有get请求并根据请求的url进行重定向

因为你想检查所有的请求,而不限于特定的文件扩展名,我建议创建一个HttpModule。这也是由MSDN支持的:

HTTP模块的典型用法包括:

    因为你可以检查传入的请求,一个HTTP模块是否可以执行自定义身份验证或其他安全检查被请求的页面、XML Web服务或处理程序被调用。

就性能而言,这也是一个很好的选择,因为模块在请求的早期运行。如果用户未被授权,则会提前重定向。为了提高性能,您还可以考虑实现某种缓存,这样您就不必在每个请求时都查询数据库。

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

实现全局检查。Asax也是一种选择,但它将您的解决方案与此应用程序绑定在一起。您可以轻松地与其他项目共享该模块。从设计的角度来看,使用模块也是很好的,因为你为这个任务创建了一个特定的模块,而不是像在全局的BeginRequest方法中那样混合功能。