0

让我们考虑一个示例网站应用程序并在本地 host.say 中运行,例如www.asdf.com。当用户在浏览器中点击 url

  1. 可以通过继承ihttp处理程序或者ihttp模块到我们的类来捕获吗

  2. 如果通过更改www.asdf.com?t=value 访问了 url,是否可以采用该值。

在java中,这个概念被用作servelet过滤器。dotnet中是否有类似的东西

等待您的回复

4

1 回答 1

1

模块和处理程序做两种不同的事情。

  1. 模块插入应用程序和请求生命周期,并在此过程中响应任意数量的事件,以影响每个请求的某些功能。通常,它用于安全、日志记录、压缩等方面。例如,在每个请求期间FormsAuthenticationModule响应AuthorizeRequest(以及其他)事件,它检查是否有身份验证票证,验证它,然后指示当前用户是否经过身份验证(以及谁)的上下文。
  2. 处理程序旨在等待对某些路径或扩展的请求并做一些有用的事情。例如,对 .ASPX 文件的请求由Page处理程序处理,该处理程序解析并执行 ASPX 及其关联的代码隐藏(如果有的话)。

模块和处理程序都可以访问HttpContext对象,这允许它们检查并在许多情况下操纵当前应用程序、当前请求和响应、用户等。所以是的,它们都可以访问请求期间提供的查询字符串值。

我相信模块最类似于 servlet 过滤器。

该模块查找t查询字符串并在每个请求的开头回显它。

public class MyModule : IHttpModule {
    public String ModuleName { 
        get { return "MyModule"; } 
    }    

    public void Init(HttpApplication application) {
        application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
    }

    private void Application_BeginRequest(Object source, EventArgs e) {
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;
        context.Response.Write(string.Format("The value of \"t\" is {0}", context.Request.QueryString["t"]);
    }        

    public void Dispose() 
    {
    }
}
于 2012-06-07T10:15:23.363 回答