2009-04-23 7 views
7

Dans ASP.NET, est-il possible d'obtenir l'URL réelle?ASP.NET: Get * real * URL brut

Par exemple, si un utilisateur navigue jusqu'à "http://example.com/mypage.aspx/%2F", je souhaite obtenir "http://example.com/mypage.aspx/%2F" plutôt que "http://example.com/mypage.aspx//". Je voudrais bien sûr une manière propre de le faire, mais je peux vivre avec une approche hacky en utilisant la réflexion ou l'accès aux propriétés obscures.

Pour l'instant, j'essaie d'utiliser l'uri dans l'en-tête Authorization (qui fonctionne), mais je ne peux pas compter sur le fait qu'il soit toujours là.

EDIT:

Ce que je veux vraiment faire est d'être en mesure de faire la distinction entre "http://example.com/mypage.aspx/%2F" et "http://example.com/mypage.aspx/%2F%2F".

Il semble que ASP.NET convertit d'abord "% 2F% 2F" en "//", puis convertit les barres obliques en une seule barre oblique.

Donc juste ré-encoder cela ne va pas fonctionner.

Répondre

6

Le code suivant fonctionne pour moi:

IServiceProvider serviceProvider = (IServiceProvider)HttpContext.Current; 
HttpWorkerRequest workerRequest = (HttpWorkerRequest)serviceProvider.GetService(typeof(HttpWorkerRequest)); 
string realUrl = workerRequest.GetServerVariable("HTTP_URL"); 

Notez que cela ne fonctionne que lorsque vous exécutez sur les services Internet (IIS) et non sous f.x. Serveur de développement ASP.NET!

Merci à Lucero pour la réponse dans un autre fil et Zhaph pour me pointer vers le fil.

+0

C'est la bonne solution. Il traite les problèmes lorsqu'il y a un encodage dans le chemin. Le HTTP_URL des variables du serveur affichera la version décodée et cette solution fournit la version codée correcte. –

+0

Cela renvoie également le résultat attendu sous IIS Express – Vivelin

1
Server.HtmlEncode(Request.RawUrl); 

L'URL brute est définie comme la partie de l'URL qui suit les informations de domaine. Dans la chaîne d'URL http://www.contoso.com/articles/recent.aspx, l'URL brute est /articles/recent.aspx. L'URL brute inclut la chaîne de requête, si présente.

voir aussi: link text

+0

Les URL de demande sont potentiellement déjà nettoyées, Request.ServerVariables ["HTTP_URL"] est plus précis. –

0

Eh bien, vous pouvez simplement encoder revenir à la version codée url.

0

Je ne peux pas tester, mais cela pourrait être ce dont vous avez besoin:

Request.Url.AbsoluteUri 
0

Obtenir l'URL de la demande et urlencode seule la partie chaîne de requête, puis de les concaténer

1

Request.RawUrl retournera le chemin relatif de l'application (y compris les informations de la chaîne de requête) tandis que Request.Url renverra le chemin complet (y compris les informations de la chaîne de requête).

Pour plus d'informations, voir «Making sense of ASP.NET paths».

6

Je n'ai pas pu tester car il ne fonctionne que dans IIS et non le serveur de développement ASP.NET qui fait partie de Visual Studio, mais essayez:

Request.ServerVariables [ « http_URL »]

+0

Cela renvoie le résultat attendu pour moi, bien qu'il ait besoin de combiner avec HTTP_HOST et HTTP_QUERY pour obtenir le reste de l'URL. –