2009-09-18 7 views
0

Dans le modèle de sécurité pour le site web sur ASP.Net (.Net 3.5) nous stockons le nom de la page.Programicatement visiter (toutes) page (s) ASP.Net dans un site web?

page.GetType() Nom

comme la clé primaire dans une table de base de données pour pouvoir recherche si un utilisateur a accès à une certaine page. La première fois qu'une page est visitée, cet enregistrement est créé automatiquement dans la base de données.

Nous avons exporté ces instructions de base de données pour insérer des scripts, mais chaque fois qu'une nouvelle page est créée, nous devons mettre à jour les scripts, pas un gros problème, mais je voudrais trouver une façon automatisée de le faire.

J'ai créé un attribut avec lequel j'ai tagué quelques pages, puis j'ai écrit un petit processus pour obtenir tous les objets ayant cet attribut, créer une instance et insérer l'enregistrement en utilisant le même code pour les enregistrements de pages mentionnés. ci-dessus:

IEnumerable<Type> viewsecurityPages = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsDefined(typeof(ViewSecurityAttribute),false)); 

      foreach (Type t in viewsecurityPages) 
      { 
       object obj = Activator.CreateInstance(t, false); 

      //clip..(This code just checks if the record already exists in the DB) 

       if (feature == null) 
       { 

        Attribute attb = Attribute.GetCustomAttribute(t, typeof(ViewSecurityAttribute)); 

        if (attb != null) 
        { 
         CreateSecurableFeatureForPage((Page)obj, uow, attb.ToString()); 
        } 

       } 

      } 

le problème est que page.GetType() Nom lorsque la page passe par le processus de cycle de page réelle est quelque chose comme ceci:.

search_accounts_aspx

mais quand je l'acte méthode ivator ci-dessus il retourne:

Comptes

Ainsi, les dossiers ne correspondent pas à la table de sécurité. Est-il possible de "visiter" une page Web de manière programmatique afin qu'elle traverse le cycle de vie réel de la page et que je récupère la valeur correcte du paramètre Nom?

Toute aide ou référence sera grandement appréciée.

Répondre

0

problème Intéressant ...

Bien sûr, il y a un (trop évident?) Façon de visiter la page ... programme utiliser System.Net.HttpWebRequest. Bien sûr, cela nécessite l'URI et pas seulement une poignée à l'objet. C'est un "comment pouvons-nous y arriver d'ici?" problème. Mes suggestions seraient de simplement créer un autre attribut (ou utiliser le même) qui stocke l'identifiant dont vous avez besoin. Ensuite, ce sera la même façon que vous y accédez, non? Alternativement ... pourquoi ne pas simplement utiliser un Web Spider/crawler tiers pour explorer votre site et frapper toutes les pages? Il y a plusieurs options gratuites. Ou est-ce que je manque quelque chose?

+0

J'ai oublié de mentionner que j'ai essayé une araignée. Le site est vraiment une application commerciale (vendue pour fonctionner sur des intranets internes) donc beaucoup de "liens" passent par des boutons de soumission, etc. Je pourrais travailler sur un sitemap je suppose ... Je n'avais pas pensé à changer l'attribut pour qu'il soit l'URI et utiliser une requête HTTP pour les visiter. Cela fonctionnerait mais exigerait toujours un effort manuel quand le site change, une pensée intéressante, je dois y penser. – mlowrance

Questions connexes