iis - 使用 global.asax 有哪些替代方法?

标签 iis login global-asax

我在 IIS 中使用我自己的自定义身份验证,并且我希望服务器在每次加载页面时(无论是什么类型的文件)都首先检查 Application 变量,以查看用户是否经过身份验证并有权查看该站点。在 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 会有所不同吗?

最佳答案

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”
| |
( | 模块 1 | )
( | 模块 2 | )
( | 模块 3 | )
五五
(处理程序 1) (处理程序 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 网站上找到更好的描述/教程。

关于iis - 使用 global.asax 有哪些替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/307821/

相关文章:

iis - 如何删除多个虚拟目录?

mysql - 我可以让 LogParser 2.2 导出到 MySQL 吗?

login - 如何在xampp中获取phpmyadmin的登录选项

asp.net-mvc - 如何在ASP.NET MVC网站中实现用户成员身份?

c# - 如何获取 Web 应用程序中的事件 session 列表?

asp.net-mvc - 在 MVC4 中路由带有扩展名的 url 将不起作用,尝试提供静态文件

login - 自定义身份验证 - 登录 Symfony2 消息

ASP.Net Session_Start 事件未触发

vb.net - System.Threading.Timer不触发,global.aspx

用于安全 Internet 连接的 WCF 选项