9

次のような両方を含む uri を強制Uriまたは許可するにはどうすればよいですか?HttpWebRequest/%2f

http://localhost:55672/api/exchanges/%2f/MyExchange

私はこれを試しました...

WebRequest request = 
    HttpWebRequest.Create("http://localhost:55672/api/exchanges/%2f/MyExchange");

...この...

Uri uri = new Uri("http://localhost:55672/api/exchanges/%2f/MyExchange", true);
WebRequest request = HttpWebRequest.Create(uri);

...この...

UriBuilder builder = new UriBuilder();
builder.Port = 55672;
builder.Path = "api/exchanges/%2f/MyExchange";
WebRequest request = HttpWebRequest.Create(builder.Uri);

ただし、これらすべてを使用すると、最終的に 404 応答が生成request.RequestUriされます。http://localhost:55672/api/exchanges///MyExchangerequest.GetResponse()

参考までに、RabbitMQ の HTTP API を使用しようとしていますが、Chrome で URL を入力すると、予期される JSON の結果が生成されます。

4

4 に答える 4

7

同じ問題が発生したばかりで、.NET 4.0 フレームワークをターゲットにしている場合にこの問題が存在することを発見しました。.NET 4.5 フレームワークをターゲットにすると、この問題はなくなります。したがって、それが選択肢である場合は、ターゲット フレームワークを切り替えると、問題が解決するはずです。

于 2013-07-23T21:12:12.180 に答える
5

しばらく前にRabbitMQ管理APIと通信したときに、まったく同じ問題が発生しました。私はそれについていくつかの解決策を含むブログ投稿を書きました。

http://mikehadlow.blogspot.co.uk/2011/08/how-to-stop-systemuri-un-escaping.html

System.Uri コードへの厄介なリフレクションを使用するか、App.config (または Web.config) の設定によって、動作をオフにすることができます。

<uri> 
    <schemeSettings>
        <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
    </schemeSettings>
</uri>
于 2013-07-24T09:59:58.913 に答える
2

サーバー側で必要な Server.UrlEncode を使用してください。そうしないと、代わりに System.Uri.EscapeDataString になります。

于 2012-07-13T20:40:21.967 に答える
1

予約文字を含む部分には Server.Encode を使用します。 http://msdn.microsoft.com/en-us/library/ms525738(v=vs.90).aspx

于 2012-07-13T20:37:24.587 に答える