none
HttpClient.GetAsync(uri)で指定できるuriのサイズの制限値または制限値変更について教えてください。 RRS feed

  • 質問

  • C#で開発をしている者です。

    下記のようにHttpClient.GetAsync()メソッドを使用して相手サーバにデータ(要求データ種別やパラメータなど)を渡して、結果を受け取っているのですが、uriに入れる文字列データ数があまり大きくない時は正常に動作していたのですが、大きい文字列データを渡した場合に、GetAsync(@uri)でException({"無効な URI: Uri の文字列が長すぎます。"})が発生してしまいます。

    GetAsync()に渡す文字列データの制限値があるのでしょうか?もし制限値がある場合は制限値を変更することは可能でしょうか?

    仮に制限値があって、変更もできない場合、文字列データが長いuriを送る方法はないでしょうか?

                using (var client = new HttpClient())
                {
                    try
                    {
                        var response = await client.GetAsync(@uri).ConfigureAwait(false);

                        jsontext = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                             ・

                             ・(省略)

                             ・

                    }
                    catch (Exception e)
                    {

                    }

    2020年1月9日 7:48

回答

すべての返信

  • Uriコンストラクタの例外の項に

    uriString の長さが 65519 文字を超えています。

    が挙げられています。

    • 回答としてマーク グリフ 2020年1月10日 2:45
    2020年1月9日 8:29
  • HttpClient も WinInet を使っているので、以下の制限がありますね。


    Hebikuzure aka Murachi Akira

    • 回答としてマーク グリフ 2020年1月10日 2:45
    2020年1月9日 8:42
  • クライアント側はクリアできてとしてもサーバー側に制約があると思います(今回のケースはわかりませんが)。もし IIS を使っているとすると、要求のフィルタリングで以下の画像の通りの制約があります。



    どのぐらい長い URL を使っているのですか?
    • 回答としてマーク グリフ 2020年1月10日 2:45
    • 編集済み SurferOnWww 2020年1月10日 4:23
    2020年1月9日 9:03
  • それは本当にInternet Explorer側の制限であって、WinInetの制限ではないはずです。

    というのも、WinInetの場合、InternetConnectで指定されたサーバーへ接続し、HttpOpenRequestでPath以降を送信するため、個々のパーツに対する制限はあるかもしれませんが、URL全体での制限とはなりません。

    • 回答としてマーク グリフ 2020年1月10日 2:45
    2020年1月9日 13:41
  • 皆さま、ご回答ありがとうございました。

    Uriコンストラクタの例外で、【uriString の長さが 65519 文字を超えています。】ということ納得しました。

    ありがとうございました。

    2020年1月10日 2:51
  • 先にもお聞きしましたが、実際どのぐらい長い URL なのですか?  65519 文字を超えるのでしょうか?


    2020年1月10日 3:21