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?
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.
Sie sollten die FtpWebRequest und FtpWebResponse Klassen, es sei denn, Sie haben einen bestimmten Grund, dies nicht zu tun.
%Vor% 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
.