2016-08-28 32 views
7
benim web api

Web Api Tamam tepki ile HttpClient kullanarak nesneyi almak nasıl

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

     return Ok(user); 
    } 

gibi aşağıda belirtildiği gibi web API istemek için HTTPClient kullanıyorum

.

İstemci uygulamasında uygulanan sonuç isteğimde kullanıcı nesnesini nerede bulabilirim?

cevap

9

Kullanabileceğiniz nesneyi (gereksiniminize göre) kullanır ve kullanıcı nesnesine geri serileştirebilirsiniz. Web API JSON dönen eğer

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

Fe, şunu kullanabilirsiniz

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

DÜZENLEME:

await result.Content.ReadAsAsync<User>() 
: cordan işaret olarak, ayrıca System.Net.Http.Formatting ve kullanılmasıyla ilgili referans ekleyebilir
+3

Neden sadece 'bekleyin sonucunu kullanın.Content.ReadAsAsync () '? – yaakov

+0

@cordan bu da bir çözümdür, ancak '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 dizesinde geçiş göreli URL'si için ek başvuru gerekir Baseurl = GetBaseUrl (microService); string url = "/ client-api/api/jeton"; –

+0

HttpClient için 'kullan' seçeneğini kullanmayın. – garfbradaz