2009-01-29 5 views
6

Ich habe ähnliche Fragen und Antworten in Bezug auf Konvertierungen von virtuellen zu absoluten und URLs gesehen, aber wie kann ich eine URL zu einem virtuellen Pfad ohne manuelle String-Analyse konvertieren?Wie konvertiert man eine URL in asp.net ohne manuellen String-Parsing in einen virtuellen Pfad?

Beispiel:

I "http://myserver/home.aspx" will umgewandelt: "~/home.aspx"

ich das obige Beispiel erkennen, eine einfache Zeichenfolge wäre Routine Parsen, aber ich bin auf der Suche nach einem richtigen Lösung, die auf das Ändern des URL-Formats skaliert.

Antwort

7

Sie können aus der Uri-Klasse die meisten davon bekommen:

new Uri("http://myserver.com/home.aspx").AbsolutePath 

Dann müssen Sie nur noch prepend die ~

Obwohl, das wird vielleicht brechen, wenn Sie in einem Unterverzeichnis Host - I don‘ Ich denke, es gibt eine Möglichkeit, dies speziell im Zusammenhang mit der Anwendung zu tun, die Sie ausführen.

EDIT: Das könnte es tun:

VirtualPathUtility.ToAppRelative(new Uri("http://myserver.com/home.aspx").AbsolutePath); 
+0

Dies funktioniert nicht, wenn die Anwendung in einem Unterordner ausgeführt wird, zum Beispiel //myserver.com/myApp/home.aspx, wie Sie erwähnt haben. – gius

+0

@EDIT: das ist, was ich geschrieben habe, ich die Kommentare für meinen Beitrag - so haben wir schließlich die Lösung zusammen :-) – gius

+0

Awesome, danke, Daniel. Ich hatte VirtualPathUtility gar nicht angeschaut. Funktioniert genau so, wie ich es brauchte! – Kilhoffer

3

VirtualPathUtility.ToAppRelative-Methode (String) scheint zu sein, was Sie suchen (http://msdn.microsoft.com/en-us/library/ms150163.aspx)

Wenn der virtuelle Pfad für die Anwendung ist "myapp" und der virtuelle Pfad "/ myApp/sub/default.asp" werden an die ToAppRelative-Methode übergeben. Der resultierende anwendungsspezifische Pfad lautet "~/sub/default.aspx".

+0

Hm, das ist also nur die halbe Strecke. :-(Könnten Sie den Trick mit Uri verwenden, um den Pfad "virtuell" zu machen und dann ToAppelative() aufzurufen? Aber ich befürchte, dass es immer noch Situationen geben könnte, in denen das nicht funktioniert. – gius