将HttpModule限制为仅处理某些请求

本文关键字:处理 请求 HttpModule | 更新日期: 2023-09-27 17:59:47

我们在网站的特定部分使用目录浏览,但我们的用户并不喜欢默认的ASP。净

目录浏览。老实说,我们也不是特别关心它。

我偶然发现mvolo的自定义目录浏览模块,并尝试使用它。然而,我发现如果我在根web.config中启用了它,它可以在没有默认页面的情况下浏览所有文件夹的目录(正如你所期望的)。如果我在根目录中设置enabled="false",它会抛出一个HttpException,它被我的通用错误页面捕获,但每个请求都会导致异常,就像请求的页面在加载过程中有额外的图像要请求一样。

正如我所相信的(我可能错了),默认目录浏览模块只在没有默认文件夹并且您没有请求特定文件的情况下检查启用的属性(例如,mysite.com/images/与mysite.com/images/logo.gif)。

我已经重建了自定义模块的功能,但我不知道如何将模块限制为仅在启用目录浏览时才完全执行,而不是针对每个请求。以下是模块中的一段代码:

    public void Init(HttpApplication app)
    {
        app.PreRequestHandlerExecute += new EventHandler(this.OnPreRequestHandlerExecute);
    }
    public void OnPreRequestHandlerExecute(object source, EventArgs e)
    {
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;
        config = (DirectoryListingConfigSection)WebConfigurationManager.GetSection("directoryBrowsing", context.Request.Path);
        if (this.config == null)
        {
            throw new Exception("Missing <directoryBrowsing> configuration section.");
        }
        /* I only want to check this if it's necessary, not for things 
           like mysite.com/images/logo.gif or mysite.com/about/history.aspx 
           -- those shouldn't give a 403 error */
        if (!config.Enabled)
        {
            context.Response.Status = "403 Forbidden";
        }
        /* The rest of the code goes below, and should only process 
           if Directory Browsing is necessary and enabled */
    }

将HttpModule限制为仅处理某些请求

模块在通过ASP的每个请求上执行。Net,没有办法根据请求类型限制对模块的调用。

您需要在模块的代码中构建检查,以仅处理该模块感兴趣的请求。

根据阶段的不同,您应该可以访问有关请求的大部分信息。在PreRequestHandlerExecute期间,您可以获得有关传入请求的所有可能信息,包括Url、标头和相关会话状态(如果存在)。