限制HttpModule只处理某些请求
我们在我们网站的特定部分使用目录浏览,但我们的用户并不喜欢默认的ASP.NET
目录浏览。 说实话,我们并不特别关心它。
我遇到了mvolo的自定义目录浏览模块,我试图使用它。 但是,我发现如果在根web.config中启用它,它将允许在没有默认页面的情况下在所有文件夹上浏览目录(如您所期望的那样)。 如果我在根中设置了enabled =“false”,它会抛出一个HttpException,它被我的通用错误页面捕获,但是每个请求都会导致异常,就像请求的页面在加载过程中请求附加图像时一样。
正如我相信(我可能是错的),默认目录浏览模块只检查启用属性,如果没有默认文件夹,并且您没有请求特定文件(例如,mysite.com/images/与mysite。 COM /图像/ 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 */
}
模块在通过ASP.Net的每个请求上执行,无法根据请求类型限制对模块的调用。
您需要在您的模块代码中构建检查以仅处理该模块感兴趣的请求。
根据阶段,您应该可以访问有关请求的大部分信息。 在PreRequestHandlerExecute
期间,您拥有有关传入请求的所有可能信息,包括Url,标题和相关会话状态(如果存在)。