0

Ich verwende die Httpclient in System.Net.Http Anfragen an einen Web-Service zu machen, wie unten:Warum codiert System.Net.Http HttpClient meine Anfrage-URL?

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

Ich habe eine Sandbox-Anwendung und eine Live-Anwendung. Die Sandbox-Anwendung hat den gleichen Code (in einem gemeinsamen Repository), der funktioniert, aber wenn client.GetAsync(url).Result in der Live-Anwendung aufgerufen wird, zeigt mir Fiddler aus irgendeinem Grund, dass die angeforderte URL codiert wurde, was die Anfrage durcheinander bringt.

angeforderte URL soll wie folgt aussehen:

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

aber endet wie folgt aussehen:

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

Jede Idee, warum? Danke

N.B. Im die Microsoft.Net.Http Bibliothek von Nuget in .NET Framework 4,5

+0

https://en.wikipedia.org/wiki/Percent-encoding – CSharpie

+1

das zweite URL eine völlig legitime Art und Weise ist die erste zu repräsentieren. Es klingt, als ob der Dienst, der die Anfrage erhält, ein Problem mit korrekt codierten URLs hat. – JLRishe

+0

@CSharpie: Ich verstehe den Punkt der URL-Codierung, aber die unerwartete Codierung von (speziell) den eckigen Klammern ist, wo ich verwirrt bin. Vor allem, weil der gleiche Code in einem anderen Projekt anders funktioniert. – Jimbo

Antwort

1
  1. Bitte sehr spezifisch über Ihre Frage mit:

    • Sie verwenden Microsoft.Net.Http Version, was?
    • kompilieren Sie unter.NET Version was?
  2. , dass Sie .NET 4.0 unter kompilieren stellte sich heraus, und das ist ein Fehler, den ich sagen würde, weil das Verhalten nicht identisch mit dem .NET Fx 4.5 System.Http

Sie beheben können, ist es durch dontEscape auf true in der Uri-Klasse Einstellung:

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);