2016-10-25 16 views
1

統合テストの一環として、コンソールアプリケーションからWebAPIを消費しようとしています。私は、このメソッドを使用します。本文リクエストでWeb APIにパラメータを送信する方法は?

private static string Consume(string endpoint, string user, string password) 
{ 
    var client = new HttpClient(); 
    client.BaseAddress = new Uri(endpoint); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 

    string body = "{\"User\":\"" + user + "\",\"Password\":\"" + password + "\"}"; 
    var response = client.PostAsync("api/ticket", new StringContent(body, Encoding.UTF8, "application/json")).Result; 
    response.EnsureSuccessStatusCode(); 
    if (response.IsSuccessStatusCode) 
      ... //process 

    return string.Empty; 
} 

私はのように型指定されたオブジェクトを使用することを好む、私はWebAPIのメソッドにパラメータを送信しています方法に非常に満足して感じることはありません:

public class Credentials 
{ 
    public string User { get; set; } 
    public string Password { get; set; } 
} 

と置きますそれは体の中にある。誰にもこれについての提案がありますか?

答えて

3

Newtonsoft.Jsonライブラリを使用して、資格情報オブジェクトをシリアル化します。 あなたConsume機能は、この

private static string Consume(string endpoint, string user, string password) 
{ 
    var client = new HttpClient(); 
    client.BaseAddress = new Uri(endpoint); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 

    var credential = new Credentials { User = user, Password = password }; 
    var credentialString = Newtonsoft.Json.JsonConvert.SerializeObject(credential, Formatting.None); 


    var response = client.PostAsync("api/ticket", credentialString).Result; 
    response.EnsureSuccessStatusCode(); 
    if (response.IsSuccessStatusCode) 
      ... //process 

    return string.Empty; 
} 

credentialStringようになる資格のクラスオブジェクトの文字列をシリアル化です。

3

このような送信オブジェクトを使用できます。

var _content = new StringContent(JsonConvert.SerializeObject(yourobject), Encoding.UTF8, "application/json"); 
var result = _client.PostAsync(yourapi, _content).Result; 
関連する問題