Maison  >  Article  >  développement back-end  >  Introduction à la méthode d'application du filtre ASP.NET

Introduction à la méthode d'application du filtre ASP.NET

高洛峰
高洛峰original
2017-01-21 15:06:321701parcourir

Dans le développement Web J2EE, il existe un filtre qui peut intercepter l'accès URL spécifié et exécuter la méthode de filtrage en fonction de la situation réelle de l'application, le code demandé est modifié dans le filtre, les informations de session sont jugées et peuvent être utilisées. être utilisé pour le contrôle des autorisations. En bref, ce filtre est très significatif. Il peut également être considéré comme une application du modèle de conception de chaîne de responsabilité dans J2EE.

Alors, est-il possible de définir une telle structure de filtre dans ASP.NET et d'effectuer les opérations logiques correspondantes dans le filtre ? La réponse est oui, cet article vous dira si vous écrivez un filtre, comment le configurer dans une application Web IIS.

Processus 1 : Comment écrire un filtre

L'écriture d'un filtre consiste en fait à écrire une classe de filtre, c'est-à-dire à écrire un module HttpModule. Ce filtre doit implémenter la classe de base IHttpModule et répéter l'écriture. Init et donnez-vous un exemple pratique comme suit :

Ceci est un PageFilter.cs

using System;
using System.Web;
using System.Web.SessionState;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO;
public class PageFilter: IHttpModule
{
        public String ModuleName
        {
            get { return "PageFilter"; }
        }
        //在 Init 方法中注册HttpApplication 
        // 通过委托方式注册事件
        public void Init(HttpApplication application)
        {
            application.AcquireRequestState += new EventHandler(Application_AcquireRequestState);            
        }
  private void Application_AcquireRequestState(Object source, EventArgs e)
        {
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            HttpSessionState session = context.Session;
            HttpRequest request = context.Request;
            HttpResponse response = context.Response;
            String contextPath = request.ApplicationPath;
        }
}

Il est à noter que "filtre" peut aussi être appelé "intercepteur", ce c'est-à-dire le processus d'interception de l'intégralité de la requête/réponse HTTP, car l'ensemble du processus de requête/réponse peut être divisé en plusieurs étapes, alors il y aura un problème impliqué, c'est-à-dire quelle étape spécifique votre filtre souhaite intercepter, comme ci-dessus dans la fonction Init, vous pouvez définir les étapes spécifiques que vous souhaitez intercepter. Par exemple, l'interception ci-dessus est l'étape où la session de requête est générée. AcquireRequestStat est le représentant de cet état, et la fonction de traitement correspondante après interception est Application_AcquireRequestState, donc. une méthode Application_AcquireRequestState est définie ci-dessous.Dans cette méthode, une série d'objets tels que l'application, le contexte, la session, la demande et la réponse peuvent être obtenus via une conversion de type forcée. Sur la base de l'obtention de ces objets, vous pouvez écrire une logique métier de base, telle que. déterminer si l'accès actuel à l'URL est légal, vérifier si l'accès actuel est l'accès de l'utilisateur après la connexion, etc.


De plus, puisque l'ensemble du processus d'interception comporte de nombreuses étapes, comment en intercepter d'autres ? Cela devrait être très simple. Semblable à ce qui précède, il suffit de le définir dans Init selon la logique suivante :

application Le nom standard de l'étape 1 = new EventHandler (le nom de la méthode de traitement correspondante de cette étape 1. );
application .Nom standard de l'étape 2 = new EventHandler (nom de la méthode de traitement correspondant à cette étape 2) ; . . Les noms standard des phases

signifient que ces phases ont des noms standard et sont des attributs standard de l'objet d'application, tels que AcquireRequestState ci-dessus, et d'autres tels que BeginRequest, AuthenticateRequest, AuthorizeRequest, ResolveRequestCache, AcquireRequestState, PreRequestHandlerExecute et PostRequestHandlerExecute. , ReleaseRequestState, UpdateRequestCache, EndRequest, de nombreuses étapes, etc. Ces étapes ont des significations spécifiques

Le nom de la méthode de traitement correspondant à cette étape est en fait votre propre définition de la méthode correspondant à cette étape. ci-dessus, pas plus d'explication.

Un autre point qui mérite une attention particulière est qu'il y a tellement d'étapes qui peuvent être interceptées, mais dans les applications réelles, nous n'interceptons souvent qu'une ou deux étapes, et il convient de noter que certains objets serveur ne peuvent être interceptés que intercepté dans des étapes spécifiques.Par exemple, l'objet Session n'existe pas dans l'étape BeginRequest, mais existe dans l'AcquireRequestState et les étapes suivantes.Par conséquent, des étapes spécifiques doivent être interceptées en fonction des besoins réels.

Processus 2 : Comment configurer le filtrage

Nous avons écrit un filtre pour un fichier .cs, alors comment faire fonctionner ce filtre. Celui-ci doit être configuré par défaut. intercepter, vous devez configurer le filtre dans le fichier Web.config de l'application. La configuration de l'exemple ci-dessus est la suivante :

<configuration>
<system.web>
 <httpModules>
   <add name="pageModule" type="PageFilter"/>
 </httpModules>
</system.web>
</configuration>
Ceci est effectivement configuré, puis publier le site Web pour générer la dll, etc. Voilà, l'accès aux URL sera automatiquement intercepté le moment venu, mais n'oubliez pas que par défaut, toutes les requêtes concernant l'application seront interceptées. Si vous pointez vers l'interception de requêtes spécifiques, par exemple, vous souhaitez intercepter uniquement les requêtes concernant les fichiers aspx. . , vous pouvez alors ajouter le jugement du nom du suffixe du fichier à la logique du filtre. S'il ne s'agit pas d'aspx, laissez-le partir

Pour plus d'articles sur les méthodes d'application des filtres ASP.NET, veuillez payer. attention au site PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn