relativen zu absoluten Link verarbeiten

dila71

Mitglied
Hallo,

kurze Frage.
ich habe in einer C# Methode dieURI, wo ich gerade befinde (Bsp. "http://server/projekt/verzeichnis/unterverzeichnis/irgendeineSeite.html").
Ich bekomme einen relativen Link (Bsp. "/index.html").

Nun die Frage: wie mache ich aus diesen beiden Infos möglichst mit .NET internen Mitteln daraus die absolute URL "http://server/projekt/verzeichnis/unterverzeichnis/index.html".

Ich habe es bisher versucht mit:
Uri v_baseUri = new Uri( "http://server/projekt/verzeichnis/unterverzeichnis/irgendeineSeite.html" );
Uri v_myUri = new Uri( v_baseUri, "../../index.html");

dabei kommt aber leider als Uri.ToString();
"http://server/index.html" heraus.

Was rauskommt wenn der relative Link "../../../index.html" ist, habe ich dabei noch nicht mal probiert.

Im voraus Danke für Eure Hilfe
Dirk
 
Hallo dila71!

Willkommen im Forum!

Die String-Klasse bietet Dir alle Werkzeuge um Strings zu bearbeiten.
Du möchtest also den Pfad des Verzeichnisses? Was hälst Du davon alles dahinter einfach abzuschneiden? ;)
Code:
string sTargetURL = "http://server/projekt/verzeichnis/unterverzeichnis/index.html"
string sURLFolder = sTargetURL.Substring( 0, sTargetURL.LastIndexOf( '/' ) );
Jetzt kannst Du ganz einfach die Seite anfügen die Du aufrufen willst.
Code:
System.Diagnostics.Process.Start( sURLFolder + "index.html" );
MfG, cosmo
 
Danke für die nette Begrüßung.

Hat mir sehr geholfen, zu erfahren, dass ich das über Stringmethoden abfackeln muss, ab hier komm ich weiter.

Tschau
Dirk
 
Hi.

Warum die String-Funktionen benutzen? Du hast doch eigentlich schon eine gute Lösung, nur wohl einen kleinen Denkfehler drinnen.

Uri v_myUri = new Uri( v_baseUri, "../../index.html");

Schau dir mal das hervorgehobene an. Wozu hast du das da drinnen?
Was geschieht denn wenn du in der Eingabeaufforderund cd .. machst? Du gehst eine Ebene zurück. Willst du das hier? So wie ich es herausgelesen habe nicht.

Schonmal cd . gemacht? Was passiert? Du bleibst im selben Verzeichnis.

Code:
Uri v_baseUri = new Uri( "http://server/projekt/verzeichnis/unterverzeichnis/irgendeineSeite.html" );
Uri v_myUri = new Uri( v_baseUri, "./index.html");

Alternativ kannst du bei der neuen Uri auch nur index.html benutzen, also einfach den Schrägstrich entfernen.

MfG,
Alex
 
Ohh, mann. Was hat mich denn da geritten. :D
Sorry für die Irreführung.
Das war jetzt schon echt ne weile her mit den URIs. :rolleyes:

Dank Dir Alex, das mit den Ordnerebenen hatte ich total vergessen. :)
 
dila71 hat gesagt.:
Ich habe es bisher versucht mit:
Uri v_baseUri = new Uri( "http://server/projekt/verzeichnis/unterverzeichnis/irgendeineSeite.html" );
Uri v_myUri = new Uri( v_baseUri, "../../index.html");

dabei kommt aber leider als Uri.ToString();
"http://server/index.html" heraus.

Wie ich schon geschrieben habe hatte ich das ja probiert.
Das problem ist, dass bei obigen Code nicht "http://server/index.html" sondern "http://server/projekt/index.html" rauskommen sollte.

Trotzdem Danke
Dirk
 
Ähm geht doch.
Hier hast nen Tool zum Testen und ein paar Beispielausgaben.

Code:
using System;

class Class1
{
	[STAThread]
	static void Main(string[] args)
	{
		Console.Write("URI: ");
		string uri = Console.ReadLine();

		Console.Write("relativer Pfad: ");
		string file = Console.ReadLine();

		Uri orig_uri = new Uri(uri);
		Uri new_uri = new Uri(orig_uri, file);

		Console.WriteLine("Neue URI mit neuem relativen Pfad: {0}", new_uri);

		Console.Write("[enter] drücken zum Beenden");
		Console.ReadLine();
	}
}

Ausgaben:
URI: http://furred.net/sub1/sub2/sub3/gaga.html
relativer Pfad: index.html
Neue URI mit neuem relativen Pfad: http://furred.net/sub1/sub2/sub3/index.html
[enter] drücken zum Beenden

URI: http://furred.net/sub1/sub2/gaga.html
relativer Pfad: sub3/test.html
Neue URI mit neuem relativen Pfad: http://furred.net/sub1/sub2/sub3/test.html
[enter] drücken zum Beenden

URI: http://furred.net/sub1/sub2/test.html
relativer Pfad: ../sub1_index.html
Neue URI mit neuem relativen Pfad: http://furred.net/sub1/sub1_index.html
[enter] drücken zum Beenden
 
Zurück