2017-01-10 15 views
2

トークンを取得するには、UserNamePasswordをheader-keyとして渡す必要があります。私は郵便配達でGETメソッドをテストし、うまくいきました。しかし、私はUserNamePasswordをヘッダキーとして送るのが難しいので、私のC#コードで同じことをすることはできません。ヘッダー(REST API)のユーザー名+パスワードでGetAsyncを使用

私のコードでは、PostAsync(コードを参照)を使用しましたが、(result.IsSuccessStatusCode)は常にfalseだったので機能しませんでした。だから私はGetAsyncと一緒に動かなければならないと思う。しかし、私はUserNamePasswordをヘッダ値としてどのように渡すのか分かりません。

マイLoginVmだけですべてのヘルプは高く評価されUserNamePassword

public static async Task<Token> Authentication(LoginVm vm) { 

     Token token = null; 

     string requestJson = JsonConvert.SerializeObject(vm); 
     var client = new HttpClient(); 

     //How to use GetAsync instead? 
     var result = client.PostAsync(new Uri("http://x.com/.../login"), 
             new StringContent(requestJson, Encoding.UTF8, "application/json")).Result; 

     if (result.IsSuccessStatusCode) { 
      string json = await result.Content.ReadAsStringAsync(); 
      if (!string.IsNullOrEmpty(json)) { 

       token = JsonConvert.DeserializeObject<Token>(json); 
      } 
     } 
     return token; 
    } 

含まれています。このような

+0

あなたのメソッドは非同期なので、 'var result =().Result'の代わりに' var result = await() 'を実行できます。 –

答えて

0

何か作業をする必要があります:

using(var client = new HttpClient()) 
{ 
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", yourCredentials) 
    var responseString = await client.GetStringAsync(yourBaseUrl); 
} 

あなたはGETが正常に動作することを言及するので。 は、その後、あなたがこのようなトークンのクラスを持っていると仮定すると:

public class Token 
{ 
    public string Duration { get; set; } 
    public string Token { get; set; } 
} 

あなたがREPONSEをデシリアライズするために、この行を追加することができます。

var responseObject = JsonConvert.DeserializeObject<Token>(responseString); 

tokenにアクセスします。

+0

ありがとうございました。私は「基本」を維持していますか、それとも交換する必要がありますか?また、私は 'if(responseString.IsSuccessStatusCode)'のように '.IsSuccessStatusCode'を使うことはできません。 – user7399041

関連する問題