2017-10-12 20 views
0

私は.net Consoleappからトークンベアラ認証をリモートのWebApiに接続しようとしています。C#このリクエストで認可が拒否されました

私のプログラムが成功したトークンを返すという事実にもかかわらず、私のPostAsync方法で私は、次のメッセージが出ます:

を「認可は、この要求のために拒否された」

私のコード

hHttpClient client = new HttpClient(); 
client.BaseAddress = new Uri(URL); 
HttpContent Content = new StringContent(string.Format("grant_type=password&username={0}&password={1}", 
    HttpUtility.UrlEncode(ApiLoginUsername), 
    HttpUtility.UrlEncode(ApiLoginPassword)), Encoding.UTF8, 
    "application/x-www-form-urlencoded"); 
HttpResponseMessage response = client.PostAsync("/api/login", Content).Result; 
string resultJSON = response.Content.ReadAsStringAsync().Result; 
result = JsonConvert.DeserializeObject<LoginTokenResult>(resultJSON); 

これまでのコードではトークンを返して結果に格納します

次の部分は、と次のようん:私は

HttpContent TestContent = new StringContent(string.Format("Authorization","Bearer"+ result.AccessToken,"application/json")); 
var Product = client.PostAsync("/api/Report",TestContent).Result;----> This is where it says Authorization denied 
var test = Product.Content.ReadAsStringAsync().Result; 
return result; 

は、なぜ私がメッセージ「認可は、この要求のために拒否された」testに取得していますいくつかのデータをretriveしようとしています受信したトークンで 私のコードに何か重要なものがありませんか?あなたのコードで

string uri = "/api/Report"; 
string token = "<token here>"; 
HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri("<base address>"); 
client.DefaultRequestHeaders.Accept.Clear(); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, uri); 
request.Headers.Add("Authorization", string.Format("bearer {0}", token); 

HttpResponseMessage response = client.SendAsync(request).Result; 

あなたはそれがリクエストヘッダにあるべき文字列のコンテンツとして認証宣伝文を投稿しようとしている:任意の助けをいただければ幸いです

+2

これにはいくつかの理由がありますが、私は、 "Bearer"と 'result.AccessToken'の間にスペースがないためです。 –

+0

@Kirkは素早い返答を感謝しますが、あなたの提案ではありませんでした –

+0

Authorization/Bearerはリクエストヘッダーです。 –

答えて

1

あなたのリクエストはこのような何かを見ることができます。

+0

現在、私は応答として「内部サーバーエラー」が発生する可能性があります。 –

関連する問題