2016-08-28 4 views
7
私のWeb APIは

のWeb APIでOK応答でのHttpClientを使用してオブジェクトを取得する方法

public async Task<IHttpActionResult> RegisterUser(User user) 
    { 
     //User Implementation here 

     return Ok(user); 
    } 

ように私は、後述するように、ウェブAPIを要求するためにHTTPClientを使用してい

var client = new HttpClient(); 
string json = JsonConvert.SerializeObject(model); 
var result = await client.PostAsync("api/users", new StringContent(json, Encoding.UTF8, "application/json")); 

クライアントアプリケーションに実装されている結果リクエストでユーザーオブジェクトを見つけることができますか?

答えて

9

あなたは(必要なものをデパンドして)、それをユーザーオブジェクトに逆シリアル化することができます。

await result.Content.ReadAsByteArrayAsync(); 
//or 
await result.Content.ReadAsStreamAsync(); 
//or 
await result.Content.ReadAsStringAsync(); 

鉄あなたのWeb APIはJSONを返している場合、あなたは

var user = JsonConvert.DeserializeObject<User>(await result.Content.ReadAsStringAsync()); 

EDIT使用することができます cordanが指摘したように、あなたもSystem.Net.Http.Formattingへの参照を追加して使用することができます。

await result.Content.ReadAsAsync<User>() 
+3

なぜ 'await result.Content.ReadAsAsync ()'を使用しないのですか? – yaakov

+0

@cordanも解決策ですが、 'System.Net.Http.Formatting'への余分な参照が必要です – Robert

1
string Baseurl = GetBaseUrl(microService); 
string url = "/client-api/api/token"; 

using (HttpClient client = new HttpClient())`enter code here` 
{ 
    client.BaseAddress = new Uri(Baseurl); 
    client.DefaultRequestHeaders.Clear(); 
    client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded"); 

    List<KeyValuePair<string, string>> keyValues = new List<KeyValuePair<string, string>>(); 

    keyValues.Add(new KeyValuePair<string, string>("client_id", "5196810")); 
    keyValues.Add(new KeyValuePair<string, string>("grant_type", "password")); 
    keyValues.Add(new KeyValuePair<string, string>("username", "[email protected]")); 
    keyValues.Add(new KeyValuePair<string, string>("password", "[email protected]")); 
    keyValues.Add(new KeyValuePair<string, string>("platform", "FRPWeb")); 


    HttpContent content = new FormUrlEncodedContent(keyValues); 
    content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); 
    content.Headers.ContentType.CharSet = "UTF-8"; 

    var result = client.PostAsync(url, content).Result; 
    string resultContent = result.Content.ReadAsStringAsync().Result; 
} 
+0

POSTAsync文字列の相対URLを渡すBaseurl = GetBaseUrl(microService); 文字列url = "/ client-api/api/token"; –

+0

HttpClientに「using」を使用しないでください。 – garfbradaz

関連する問題