Alternative zur .NET Uri-Implementierung?

8

Ich habe ein Problem mit der Uri-Implementierung von .NET. Es scheint, dass, wenn das Schema "ftp" ist, der Abfrageteil nicht als Abfrage geparst wird, sondern als Teil des Pfades.

Nehmen Sie den folgenden Code zum Beispiel:

%Vor%

Mir scheint, dass die Uri-Klasse den Abfrageteil fälschlicherweise als Teil des Pfades analysiert. Wenn Sie jedoch das Schema auf http ändern, ist das Ergebnis wie erwartet:

%Vor%

Hat jemand eine Lösung dafür oder kennt eine alternative Uri-Klasse, die wie erwartet funktioniert?

    
Johnny Egeland 10.02.2009, 11:22
quelle

4 Antworten

4

Nun, das Problem ist nicht, dass ich keine FTP-Verbindung erstellen kann, sondern dass URIs nicht gemäß RFC 2396 analysiert werden.

Eigentlich wollte ich eine Factory erstellen, die Implementierungen einer generischen Dateiübertragungsschnittstelle (die get- und put-Methoden enthält) basierend auf einem bestimmten Verbindungs-URI bereitstellt. Der URI definiert das Protokoll, die Benutzerinformationen, den Host und den Pfad. Alle Eigenschaften, die übergeben werden müssen, müssen über den Abfrageteil des URI übergeben werden (z. B. die Passive-Modus-Option für die FTP-Verbindung).

Dies erwies sich jedoch bei der Verwendung der .NET Uri-Implementierung als schwierig, da der Abfrage-Teil von URIs basierend auf dem Schema offensichtlich analysiert wurde.

Ich hatte also gehofft, dass jemand einen Workaround dafür oder eine Alternative zu der scheinbar kaputten .NET Uri-Implementierung kannte. Wäre schön zu wissen, bevor ich Stunden damit verbringe, meine eigenen zu implementieren.

    
Johnny Egeland 10.02.2009, 14:01
quelle
2

Sie sollten die FtpWebRequest und FtpWebResponse Klassen, es sei denn, Sie haben einen bestimmten Grund, dies nicht zu tun.

%Vor%

Ref1 Ref2

    
cgreeno 10.02.2009 11:44
quelle
2

Ich habe eine Weile mit dem gleichen Problem gekämpft. Wenn versucht wird, den vorhandenen UriParser für das Schema "ftp" mit UriParser.Register zu ersetzen, wird InvalidOperationException ausgegeben, weil das Schema bereits registriert ist.

Die Lösung, die ich mir ausgedacht habe, beinhaltet die Verwendung von Reflektion, um den bestehenden FTP-Parser so zu modifizieren, dass er den Abfrage-String erlaubt. Dies basiert auf einer Problemumgehung zu einem anderen UriParser-Fehler .

%Vor%

Führen Sie das irgendwo in Ihrer Initialisierung aus, und Ihr ftp Uris wird die Abfragezeichenkette in den Parameter Query bringen, wie Sie erwarten würden, anstatt Path .

    
Dave Andersen 24.05.2011 16:44
quelle
1

Sie müssen eine bestimmte Klasse für das FTP-Protokoll wie FtpWebRequest verwenden, die eine Uri-Eigenschaft wie RequestUri hat.

Sie sollten in diesen Klassen nach einem Uri-Parser suchen, denke ich.

    
Polo 10.02.2009 11:27
quelle

Tags und Links