0

System.Net.Http で HttpClient を使用して、以下のように Web サービスへの要求を行います。

using (var client = new HttpClient())
{
    using (var response = client.GetAsync(url).Result)
    {
        var result = response.Content.ReadAsStringAsync().Result;
    }
}

サンドボックス アプリケーションとライブ アプリケーションがあります。サンドボックス アプリケーションには (共有リポジトリ内に) 同一のコードがあり、正常に動作しますがclient.GetAsync(url).Result、ライブ アプリケーションで呼び出されると、何らかの理由で Fiddler が、要求された URL がエンコードされており、要求が台無しになっていることを示します。

要求された URL は次のようになります。

/advert?paginate=1&page=1&language=en&filters[updated_at][ge]=2016-03-21%2012:19:05

しかし、最終的には次のようになります。

/advert?paginate=1&page=1&language=en&filters%5Bupdated_at%5D%5Bge%5D=2016-03-21%2012:19:05

理由はありますか?ありがとう

NB Imは、.NET Framework 4.5でNugetのMicrosoft.Net.Httpライブラリを使用しています

4

1 に答える 1

2
  1. 質問について具体的に教えてください:

    • Microsoft.Net.Http のバージョンは何を使用しますか?
    • あなたは.NETバージョンの下で何をコンパイルしますか?
  2. .NET 4.0 でコンパイルしていることが判明しました。動作が .NET Fx 4.5 System.Http と同じではないため、これはバグです。

dontEscapeUri クラスで true に設定することで修正できます。

 var url = new Uri(@"http://google.com/advert?paginate=1&page=1&language=en&filters[updated_at][ge]=2016-03-21%2012:19:05", dontEscape: true);
于 2016-03-21T16:15:07.803 に答える