2014-12-09 38 views
10

Ben bir sunucuya POST isteği göndermek için aşağıdaki kodları kullanın parametreleri: Ben bilmek istiyorum ama debug sunucuya erişimi olmayanC#: HttpClient POST ile

string url = "http://myserver/method?param1=1&param2=2"  
HttpClientHandler handler = new HttpClientHandler(); 
HttpClient httpClient = new HttpClient(handler); 
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url); 
HttpResponseMessage response = await httpClient.SendAsync(request); 

olarak gönderilen bu isteği POST veya GET?

Eğer GET ise, param1 & param2 POST verisi (URL'de değil) olarak göndermek için kodumu nasıl değiştirebilirim? Ben söylediği gibi

+3

Post, "yeni HttpRequestMessage (HttpMethod.Post, url)" olarak gönderildiğinde, "HttpMethod.Post" ifadesini kullanarak bir POST isteği oluşturuyorsunuz. Param1 ve param2 nedir? –

+0

Fiddler'ı kullanmayı deneyin? – SanyTiger

+0

@BenRobinson Teşekkürler. param1 & param2 parametreleri POST parametreleri AMA sorgu dizesi olarak göndermek istediğim parametrelerim. –

cevap

-3

, siz (kodunuzda belirtilen HttpMethod.Post) isteğinizi şey yapmayacağım muhtemelen url dahil

querystring (get) parametrelerini gönderiyorsunuz.

bu deneyin:

string url = "http://myserver/method";  
string content = "param1=1&param2=2"; 
HttpClientHandler handler = new HttpClientHandler(); 
HttpClient httpClient = new HttpClient(handler); 
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url); 
HttpResponseMessage response = await httpClient.SendAsync(request,content); 

hth,

+0

@JohnCroneh, bu artık çalışmıyor. Lütfen aşağıdaki diğer cevabı kabul edin! –

+0

@JohnCroneh Lütfen kabul edilen cevabı işinize yarayacak şekilde değiştirin. –

+1

@ R.McManaman Aslında bilinen bir yöntem türü oluşturmamanız durumunda bu iyi bir cevaptır. Bazı "kullanma", eksik olduğunu ve "dönüştürülmüş olduğundan emin olun" emin olmak için eksik, ancak PostAsync sarmalayıcı uygulamasını izler. – HellBaby

22

bovako bir temizleyici alternatif parametreleri işlemek için bir Dictionary kullanmak olacaktır. Her şeyden önce anahtar-değer çiftleri. Eğer usingMicrosoft docs yılında HttpClient sınıfının Açıklamalar bölümünde belirtildiği gibi

, HttpClient kere kullanacağımız gerektiğini ve tekrar kullanılır anahtar kelimeyi kullananların yoksa

private static readonly HttpClient HttpClient; 

static MyClassName() 
{ 
    // HttpClient is intended to be instantiated once and re-used throughout the life of an application. 
    // Instantiating an HttpClient class for every request will exhaust the number of sockets available under heavy loads. 
    // This will result in SocketException errors. 
    // https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netframework-4.7.1 
    HttpClient = new HttpClient();  
} 

var url = "http://myserver/method"; 
var parameters = new Dictionary<string, string> { { "param1", "1" }, { "param2", "2" } }; 
var encodedContent = new FormUrlEncodedContent (parameters); 

var response = await HttpClient.PostAsync (url, encodedContent).ConfigureAwait (false); 
if (response.StatusCode == HttpStatusCode.OK) { 
    // Do something with response. Example get content: 
    // var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait (false); 
} 

Ayrıca Dispose() HttpClient dont unutmak .

Düzenleme: Sen response.EnsureSuccessStatusCode(); yerine if (response.StatusCode == HttpStatusCode.OK) içine bakmak isteyebilirsiniz

.

HttpClient'inizi ve Dispose()'u saklamak isteyebilirsiniz. Bkz .: Do HttpClient and HttpClientHandler have to be disposed?