Url-Codieren, Schrägstrich ( / ).NET
Wie kann ich erzwingen, entweder Uri
oder HttpWebRequest
zu ermöglichen, eine uri, die sowohl /
und %2f
wie die folgenden?
http://localhost:55672/api/exchanges/%2f/MyExchange
Habe ich versucht, dieses...
WebRequest request =
HttpWebRequest.Create("http://localhost:55672/api/exchanges/%2f/MyExchange");
...und diese...
Uri uri = new Uri("http://localhost:55672/api/exchanges/%2f/MyExchange", true);
WebRequest request = HttpWebRequest.Create(uri);
...und diese...
UriBuilder builder = new UriBuilder();
builder.Port = 55672;
builder.Path = "api/exchanges/%2f/MyExchange";
WebRequest request = HttpWebRequest.Create(builder.Uri);
Jedoch mit all diesen request.RequestUri
endet http://localhost:55672/api/exchanges///MyExchange
und request.GetResponse()
produziert einen 404 response.
FYI ich versuche, RabbitMQ die HTTP-API und die Eingabe der Url in Chrome produziert die erwarteten JSON-Ergebnis.
Ich habe auch versucht
FWIW, ich habe gebaut .NET-client für das RabbitMQ-management-API, die könnte sparen Sie etwas arbeiten: nuget.org/packages/EasyNetQ.Management.Client
HttpWebRequest.Create("http://localhost:55672/api/exchanges/%252f/PrintConnector");
interessant ist, dass dies produziert die gleichen request.RequestUri
wie oben, aber request.RequestUri.LocalPath
richtig codiert ist, um /api/exchanges/%2f/MyConnector
FWIW, ich habe gebaut .NET-client für das RabbitMQ-management-API, die könnte sparen Sie etwas arbeiten: nuget.org/packages/EasyNetQ.Management.Client
InformationsquelleAutor Clay | 2012-07-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wir hatten gerade das gleiche problem und festgestellt, dass dieses problem existiert, wenn Sie sind targeting .NET 4.0 framework. Es geht Weg, wenn Sie Ziel die .NET 4.5 framework. Also wenn das eine option für Sie, schalten Sie Ihr Ziel-framework und es sollte Ihr Problem beheben.
Scheint wieder zurück zu sein .NET Core 2.0.
InformationsquelleAutor amsimmon
Ich hatte genau dasselbe problem bei der Kommunikation mit dem RabbitMQ-management-API eine Weile zurück. Ich schrieb einen blog-post darüber, auch ein paar Lösungen:
http://mikehadlow.blogspot.co.uk/2011/08/how-to-stop-systemuri-un-escaping.html
Können Sie wiederum das Verhalten aus-entweder mit einigen bösen Reflexion in das System.Uri-code, oder durch eine Einstellung in der App.config (oder Web.Konfiguration):
Uri uri = new Uri("http://localhost:55672/api/exchanges/%2f/MyExchange"); Console.WriteLine(uri);
Ich benutze genau diese Methode in meine RabbitMQ.Management.Client-Bibliothek. Schau mal hier: github.com/mikehadlow/EasyNetQ/tree/master/Source/...
InformationsquelleAutor Mike Hadlow
Server Verwenden.Encode Teil mit den reservierten Zeichen.
http://msdn.microsoft.com/en-us/library/ms525738(v=vs. 90).aspx
InformationsquelleAutor Paul Fleming
Bitte verwenden Sie Server.UrlEncode ist es erforderlich server-Seite oder das Alternative System.Uri.EscapeDataString
request = HttpWebRequest.Create("http://localhost:55672/api/exchanges/" + Uri.EscapeDataString("/") + "/MyExchange");
InformationsquelleAutor HatSoft