2017-10-12 87 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消息中「授權已被拒絕了這個請求」令牌 我在代碼中丟失了重要的東西嗎?任何幫助,將不勝感激

+2

這可能是一些原因,但我的猜測是,這是因爲「承載」和「result.AccessToken」之間沒有空格。 –

+0

@Kirk感謝您的快速回復,但這不是您建議的 –

+0

授權/承載是請求標題。 –

回答

1

您的要求可能會是這個樣子:

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; 

在你的代碼試圖發佈授權的Blurb作爲字符串內容,它應該是在請求頭。

+0

顯然,你是正確的,因爲現在我得到響應「內部服務器錯誤」 –

相關問題