2017-10-12 11 views
0

Je suis en train de me connecter avec un authentificateur de support de jeton dans un WebApi à distance de mon .net Consoleapp.C# Autorisation a été refusée pour cette demande

Malgré le fait que mon programme revient avec un succès un jeton, dans ma PostAsync méthode que je reçois le message suivant:

« L'autorisation a été refusée pour cette demande »

Mon code est la suivante

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); 

jusqu'à présent, si bon code retourne un jeton et le stocke dans le résultat

La partie suivante fait ce qui suit avec: Avec le jeton que j'ai reçu je suis en train de retrive des données

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; 

Pourquoi ai-je dans le test le message « autorisation a été refusée pour cette demande » Ai-je manqué quelque chose d'important dans mon code? Toute aide serait appréciée

+2

Cela pourrait être un certain nombre de raisons, mais je suppose que c'est parce qu'il n'y a pas d'espace entre '" Bearer "' et 'result.AccessToken'. –

+0

@Kirk merci pour la réponse rapide, mais ce n'était pas ce que vous suggérez –

+0

Authorization/Bearer est un en-tête de demande. –

Répondre

1

Votre demande pourrait ressembler à ceci:

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; 

Dans votre code que vous essayez d'afficher le texte de présentation de l'autorisation en tant que contenu de la chaîne où il devrait être dans l'en-tête de demande.

+0

Propably vous avez raison parce que maintenant je reçois comme réponse "Internal Server Error" –