2010-12-08 10 views
5

Scénario: J'ai une application relative à l'URL comme "~/chemin/vers/page.aspx? Requête = chaîne". J'ai besoin de créer par programme une demande Web à cette page et en utilisant actuellement WebRequest.Create. Le problème est WebRequest.Create nécessite une adresse URL complète incluant le protocole/domaine/port, etc.Y a-t-il un built-in créer une URL absolue (complète) à partir d'un chemin relatif tel que "~/page.aspx" étant donné l'URL actuelle?

J'ai accès à l'objet Request.Url actuel, mais il ne semble pas y avoir un moyen facile d'obtenir juste la base url garder le protocole (HTTP vs HTTPS) ainsi que tous les numéros de port ainsi que le chemin de l'application.

Je veux dire toutes les informations là-bas, donc si besoin je pourrais juste prendre toutes les pièces et les combiner mais il semble que ce soit sujet à erreur et ce serait génial d'avoir quelque chose de intégré qui est bien testé le travail. Page.ResolveUrl me fait presque là, mais il manque le protocole et le domaine/port.

Répondre

9

Essayez System.Web.VirtualPathUtility.ToAbsolute(). J'ai utilisé cela (bien que dans VB.NET, mais je suis sûr qu'il y a un équivalent C#) avec beaucoup de succès. Il peut même traduire juste un chemin virtuel de base (c'est-à-dire System.Web.VirtualPathUtility.ToAbsolute("~") deviendra l'URL de base de votre application).

EDIT

Que diriez-vous Request.Url.GetLeftPart(UriPartial.Authority)? Cela devrait obtenir les parties Scheme et Authority de l'Url (que je crois être le protocole et le domaine auquel vous faites référence). Voici le document MSDN: http://msdn.microsoft.com/en-us/library/system.uri.getleftpart.aspx

+1

Pas bon. 'System.Web.VirtualPathUtility.ToAbsolute (" ~ ")' donne '/ applicatioName' au lieu de' http: // localhost: 3384/applicationName' – Davy8

+0

J'ai ajouté une suggestion supplémentaire. – Ender

+0

Brillant, merci! – Davy8