2010-07-01 3 views
1

J'ai une application ASP.Net avec beaucoup de pages. Mon problème est d'identifier de manière unique chaque page de mon application. maintenant l'application peut avoir des pages avec juste le nom de la page, par exemple: home.aspx et peut avoir des pages avec des chaînes de requête, par exemple: testPage.aspx? q1 = 1 & q2 = 2. Ce que je pensais est que chaque URL de mon application est unique, je pourrais utiliser le nom de la page + tous les paramètres de chaîne de requête concaténés (clé et valeur) pour identifier la page de façon unique. par exemple: home.asp -> maisonCréer un ID unique pour une page dans une application ASP.Net

testPage.aspx q1 = 1 = 2 & q2 -> testpageq11q22

Est-ce la bonne façon d'aller ou est-il une meilleure façon de le faire?.

La raison pour laquelle je veux faire ceci est que j'ai besoin d'ajouter au moment de l'exécution quelques informations de méta-données provenant d'une base de données pour chacune des pages. Le PageID devient alors mon ID unique que je peux ensuite mapper toutes les informations de mes métadonnées dans le db.

EDIT:

la position des chaînes de requête dans l'URL est pas important. si

testPage.aspx? q1 = 1 = 2 & q2

testPage.aspx? q2 = 2 & = 1 q1

sont les mêmes

En outre il peut y avoir certains cas où est une chaîne de requête en option (ne se fait pas beaucoup) donc quelque chose comme

testPage.aspx? q1 = 1 = 2 & q2

testPage.aspx? Q1 = 1 = 2 & q2 & OPT1 = 1

tient à potentiellement à la même page (où l'option me donne param une sorte de méta-informations des thats n'est pas utilisé pour générer le contenu des la page)

Répondre

0

Avec votre approche, ce sera mieux si vous définissez délimiteurs appropriés:

testPage.aspx?q1=1&q2=2 -> testpage_q11-q22

ici _ est pour séparer le nom de la page de querystring et - sépare un qu paramètre erystring d'un autre.

+0

Merci pour le conseil. :) – icecubed

3

Pourquoi avez-vous besoin de créer un ID pour la page? Vous pouvez simplement utiliser l'URL sans changement.

Ce seront quelques caractères de plus, mais cela n'a guère d'importance puisque vous comparez déjà des chaînes. En outre, en l'utilisant inchangé, vous évitez toute collision, par exemple entre Page.aspx? ViewId = 42 et PageView.aspx? Id = 42.

+0

Je ne peux pas vraiment garder l'URL dans sa forme brute que l'ordre des chaînes de requête n'est pas important pour moi. donc par exemple: testPage.aspx? q1 = 1 & q2 = 2 testPage.aspx? q2 = 2 & q1 = 1 sont la même page pour moi mais ont des URL différentes quand je les compare. Aussi il peut y avoir des cas où il y a une chaîne de requête facultative (ne se produit pas beaucoup) donc quelque chose comme testPage.aspx? Q1 = 1 & q2 = 2 testPage.aspx? Q1 = 1 & q2 = 2 & opt1 = 1 serait potentiellement point à la même page (où le param facultatif me donne une sorte de meta information qui n'est pas utilisée pour générer le contenu sur la page) – icecubed

+0

@icecubed: Ok, alors vous pouvez créer une URL normalisée avec seulement les paramètres pertinents pour identifier le page. Vous pouvez toujours utiliser le même format bien connu, il n'y a aucune raison d'inventer un nouveau format propriétaire. – Guffa

0

Vous pouvez toujours utiliser un hachage de l'URL pour obtenir une valeur légèrement plus agréable. C'est certainement mieux que ce que vous avez fait pour les raisons que d'autres ont suggéré sur l'ambiguïté. Il vous donne également un int qui est un identifiant beaucoup plus agréable qu'une chaîne. Bien sûr, il y a une chance minime de collision, mais je ne pense pas que vous ayez à vous inquiéter à ce sujet.

+0

Notez que la méthode intégrée GetHashCode change de temps en temps, elle n'est donc pas adaptée à la création d'un code de hachage stocké dans une base de données. – Guffa

+0

est peut-être une question triviale, mais existe-t-il un moyen standard de faire des hachages dans la bibliothèque .net ou dois-je en écrire un moi-même? – icecubed

0

S'il s'agit d'un site public et que vous avez des inquiétudes sur le référencement, vous pouvez envisager un module de réécriture d'url tel que UrlRewriter qui vous permettra de produire une URL plus belle (un peu comme SO).

Vous pouvez mapper

www.mysite.com/testpage.aspx?pageId=1 

le plus convivial

www.mysite.com/1.aspx 

ou mieux encore, si vous avez inclus une belle description comme paramètre url que vous pourriez avoir urls tels que

www.mysite.com/testpage.aspx?pageId=1&pageTitle=something-nice 

à

www.mysite.com/1/something-nice.aspx 
Questions connexes