2010-07-08 6 views
1

Vous pouvez obtenir le nom d'une page dans HttpContext via Request.Path.Un moyen unique d'identifier une instance de page dans HttpContext

Existe-t-il un moyen de distinguer les différentes demandes de la même page?

Lorsque deux instances différentes de votrepage.aspx font une demande, comment pouvez-vous distinguer les deux en utilisant HttpContext?

+1

Pourquoi voulez-vous distinguer les demandes? Pourriez-vous élaborer? – madaboutcode

+0

Dans son livre ASP.NET, Dino Esposito utilise les httpmodules pour distinguer les publications et les actualisations afin d'éviter les répétitions multiples du même traitement de page, mais la solution ne fonctionne que si une instance d'une page est diffusée. Si dans le httpmodule en utilisant httpcontext, je peux distinguer les mêmes pages, alors je pense que je répare le problème. Je sais que d'autres solutions existent et je pourrais probablement les utiliser, mais je ne vois que ce qui est possible. – Steve

+0

essayez-vous réellement d'identifier les demandes du même navigateur/utilisateur? –

Répondre

3

vous voulez probablement faire dans une classe de page de base, mais voici ce que je ferais

public partial class Default : System.Web.UI.Page 
{ 
    private Guid _instanceID; 

    public Guid InstanceID 
    { 
     get { return _instanceID; } 
    } 

    /// <summary> 
    /// Constructor 
    /// </summary> 
    public Default() 
    { 
     this._instanceID = Guid.NewGuid(); 
    } 
} 

puis en utilisant HttpContext quelque part ailleurs dans votre code ...

 if (HttpContext.Current.CurrentHandler is Default) 
     { 
      ((Default)HttpContext.Current.CurrentHandler).InstanceID; 
     } 
+0

Malheureusement, au point de traitement où j'accède à currenthandler, c'est null, car c'est avant que la page ne soit instanciée. – Steve

+0

euh ... alors qu'est-ce que vous essayez d'identifier ??? de votre question initiale: "lorsque deux instances différentes de votrepage.aspx font une demande, comment pouvez-vous distinguer les deux en utilisant HttpContext?" –

2

Rien de ce qui est intégré à ASP.NET ne vous permettra de différencier différentes "instances de pages" ou demandes de celles-ci.

Toutefois, vous pouvez facilement ajouter un Guid à votre état d'affichage pour identifier chaque page de manière unique. Ce mécanisme fonctionne correctement lorsque vous êtes dans la classe Page elle-même. Si vous devez identifier les demandes avant d'atteindre le gestionnaire de pages, vous devez utiliser un mécanisme différent (puisque l'état d'affichage n'est pas encore restauré).

L'événement Page.LoadComplete est un emplacement approprié pour vérifier si un Guid est associé à la page et, dans le cas contraire, en créer un.

+0

L'ajout d'un guid à viewstate identifie uniquement un navigateur unique et non une instance de page unique. Je pense cependant que vous pourriez avoir la réponse qu'il cherche - mais pas la question qu'il a posée. –

+0

L'idée Guid est quelque chose que j'utilise très efficacement pour reconnecter une page sur la publication avec des données toujours conservées sur le serveur. Il faut garder un œil sur la taille de viewstate mais un GUID supplémentaire n'est pas trop lourd –

1

Si vous utilisez l'authentification, cela vous aiderait-il à distinguer quel utilisateur a soumis la page?

Vous pouvez utiliser System.Web.Httpcontext.Current.User.Identity.Name.

1

juste jeter ceci: NInject (et d'autres conteneurs DI) utilisent un mécanisme de portée basé sur l'objet HttpContext.Current lui-même, donc en fonction de ce que vous essayez de faire, vous pourriez essayer de récupérer un objet d'état du conteneur DI et passer de Là.

Questions connexes