当前位置:  开发笔记 > 后端 > 正文

从使用HTTPModule中排除某些页面

如何解决《从使用HTTPModule中排除某些页面》经验,为你挑选了3个好方法。

有没有一种好方法可以排除某些页面使用HTTP模块?

我有一个使用自定义HTTP模块验证会话的应用程序.HTTP配置在web配置中设置如下:


  
  
    
  

要从页面中排除模块,我尝试这样做(没有成功):


  
    
    
      
    
  

有什么想法吗?



1> 小智..:

HttpModules附加到ASP.NET请求处理管道本身.httpModule本身必须注意确定它想要处理哪些请求以及它想要忽略哪些请求.

例如,这可以通过查看context.Request.Path属性来实现.



2> Crob..:

您可以使用HTTPHandler而不是HTTPModule.处理程序允许您在Web.Config中声明它们时指定路径.


如果必须使用HTTPModule,则只需检查请求的路径,如果要排除该请求,则绕过验证.



3> Mr. Pumpkin..:

下面是一些如何通过扩展来过滤请求的简单示例...以下示例从具有特定扩展名的处理文件中排除.通过文件名过滤看起来几乎与一些小的变化相同......

public class AuthenticationModule : IHttpModule
{
    private static readonly List extensionsToSkip = AuthenticationConfig.ExtensionsToSkip.Split('|').ToList();

    // In the Init function, register for HttpApplication 
    // events by adding your handlers.
    public void Init(HttpApplication application)
    {
        application.BeginRequest += new EventHandler(this.Application_BeginRequest);
        application.EndRequest += new EventHandler(this.Application_EndRequest);
    }

    private void Application_BeginRequest(Object source, EventArgs e)
    {
        //  we don't have to process all requests...
        if (extensionsToSkip.Contains(Path.GetExtension(HttpContext.Current.Request.Url.LocalPath)))
            return;

        Trace.WriteLine("Application_BeginRequest: " + HttpContext.Current.Request.Url.AbsoluteUri);
    }

    private void Application_EndRequest(Object source, EventArgs e)
    {
        //  we don't have to process all requests...
        if (extensionsToSkip.Contains(Path.GetExtension(HttpContext.Current.Request.Url.LocalPath)))
            return;

        Trace.WriteLine("Application_BeginRequest: " + HttpContext.Current.Request.Url.AbsoluteUri);
    }
}

一般的想法是在配置文件中指定应该处理(或从处理中排除)的确切内容,并在模块中使用该配置参数.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有