从http处理程序获取参数值

时间:2012-06-07 09:59:07

标签: c# .net servlet-filters

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

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

  2. 如果通过更改 www.asdf.com?t=value 来更新网址,则可以获取该值。

  3. 在java中,这个概念用作servlet过滤器。在dotnet中有没有类似的东西

    等待你的回复

1 个答案:

答案 0 :(得分:1)

模块和处理程序做两件事。

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