URLリクエストに角括弧が必要なWebアドレスからhttp GETを実行しようとしています-次のようなものです:
string requestconstructor = "http://address:port/datalink?test.a[somestuff]"
System.Net.WebClient webClient = new System.Net.WebClient();
string result = webClient.DownloadString(requestconstructor);
webclient エンコーディングを utf8 と ascii に設定しようとしました。また、文字列宣言の角括弧をそれぞれ \u00b5 と \u00b6 に置き換えて直接エンコードしようとしましたが、これらのメソッドのいずれも有効な文字列をサーバーに送信していません. downloadstring 呼び出しで requestconstructor の前に @ 記号を付けてみました...
引用符で囲まれた内容を正確にコピーして Web ブラウザーに貼り付けることができ、完全に機能します。角かっこを必要とせず、機能するサーバーの機能に要求を行うために持っているコードを使用できます。
これらの文字を使用してリクエストを行う方法はありますか?
ありがとうございました!
更新: 手動でエスケープ コードを含め、Uri.EscapeDataString を使用して、提案されたコードを試しましたが、それでも失敗しました。サーバーからコード 500 が返されて失敗するたびに、これは、Web ブラウザーの URL バーで要求を誤って入力した場合に返されるコードと同じです。
問題は、サーバーがこれらの文字がエスケープされていないことを期待していることと、あなたの助けを借りて手動で実行しようとする前から、webclient がそれらを自動的に変換していた可能性があることだと思いますか? エンコードせずに、Web クライアントに文字列をそのまま送信させる方法はありますか? または、特殊文字コードの代わりにプレーン テキストとして [ および ] を送信する .encoding プロパティの設定はありますか? それが、最初の努力で @ を使ってやろうとしていたことです。
更新 2 - リクエストを分析するために Fiddler をロードしました...そして、私の診断は正しかったです...URL を chrome fiddler に入力すると、「[stuff]」が含まれていると表示されます。C# 経由で同じアドレスをロードすると、「%5Bstuff%5D」として出力されます。したがって、C# を説得して、私が入力した方法で URL 要求を送信するだけで、役に立たないようにし、Web 標準に準拠させる必要があります。私はそれを行う方法がわかりません。しかし... 私は何をする必要があるかを知っています。