当前位置:  开发笔记 > 编程语言 > 正文

有什么替代方法可以使用global.asax?

如何解决《有什么替代方法可以使用global.asax?》经验,为你挑选了1个好方法。

我正在使用自己的自定义身份验证与IIS,我希望每个页面上的服务器加载(无论什么类型的文件)首先检查应用程序变量,以查看用户是否经过身份验证并有权查看该站点.在global.asax中,这可能是:

void Application_Start(Object Sender, EventArgs e)
{
  if(Application["username"] == null)
  {
    Response.redirect("login.aspx");
  }
}

问题是这个站点有多个子根.也就是说,http://example.com/site1 是一个与http://example.com/site2完全不同的网站.因此,我想说Application_Start函数在site1上工作但不影响site2.

如果global.asax可以在目录级别自定义,那么这不会是一个问题.但由于每个服务器只有一个global.asax,因此我无法实现此解决方案.

global.asax还有哪些替代方案?或者global.asax能以某种方式为每个目录不同吗?



1> Alexander Bi..:
HttpModules是global.asax的替代品

(另请参阅https://www.codeguru.com/csharp/.net/net_asp/article.php/c19389/HTTP-Handlers-and-HTTP-Modules-in-ASPNET.htm
http://codebetter.com/blogs /karlseguin/archive/2006/06/12/146356.aspx)

HttpModules在web.config中注册; 其中,方便,在目录级定制.因此,每个目录都可以拥有自己独特的模块集(在较低的目录中继承).所有模块都具有与global.asax相同的功能.

基本上,每个页面请求在到达实际页面代码本身之前都会通过每个已注册的模块.无论它是什么类型的请求,都会发生这种情况:

"page.aspx"    "page.html"
    |             |
(   |  module 1   |  )
(   |  module 2   |  )
(   |  module 3   |  )
    V             V
(handler 1) (handler 2)

((更好的图片和描述可以在https://www.codeguru.com/csharp/.net/net_asp/article.php/c19389/HTTP-Handlers-and-HTTP-Modules-in-ASPNET.htm找到)))

因此,您需要做的就是将代码定义为模块而不是global.asax.如果用户未经过身份验证,则:response.redirect("login.aspx")将停止控制从到达处理程序并解析/返回/运行请求的页面.

它比这复杂一点,因此可以在codeguru网站上找到更好的描述/教程.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有