2010-10-05 16 views
0

Imaginez une application Web Forms avec routage. un nom de page propre comme:ASP.NET Comment empêcher l'accès direct au formulaire Web sous-jacent dans une application de routage?

http://www.mywebsite.com/home

aurait peut-être un sous-jacent d'URL:

http://www.mywebsite.com/page.aspx?id=3

Si un utilisateur entre http://www.mywebsiter.com/page.aspx?id=3 dans un navigateur, je dois rediriger vers http://www.mywebsite.com/home

Est-ce possible? Je ne peux pas trouver un moyen de le faire car le moteur de routage n'est pas exécuté pour une page physique et dans la méthode page.aspx Page_Load Je n'ai aucun moyen de savoir si l'URL a été entrée directement ou si elle est le résultat d'un itinéraire .

Répondre

1

Vous pouvez utiliser la collection Page.RouteData.Values pour détecter si la page est en cours de chargement en raison d'un routage, plutôt que d'une URL directe. Cela peut être fait dans Page_Load().

S'il existe des valeurs de données de route (vous vérifieriez probablement les valeurs qui devraient exister), elles sont correctes. S'il n'y a pas de valeurs de données de route, la page a été chargée 'directement', et vous devez les rediriger.

0

Consultez le IIS URL rewrite module.

Vous pouvez également regarder des choses comme la désactivation du routage pour les fichiers (RouteTable.Routes.RouteExistingFiles = false;) - qui pourrait être dangereux si!

+0

Cela n'aide pas avec ce que Petras veut; pour empêcher le chargement d'une page par l'URL 'réelle', fondamentalement. –

+0

@Andrew me dites-vous que vous ne pouvez pas utiliser la réécriture d'URL pour convertir '/page.aspx? Id = 3' en'/home'? – Jon

+0

Je vous dis que ce n'est pas ce que veut le PO. Il veut empêcher quelqu'un de charger /page.aspx?id=3, ou plutôt * de les rediriger * s'ils le font. La réécriture ne fait pas ça. –