2017-10-12 2 views
0

Ich versuche, mit einem Token-Träger-Authentifizierung in eine Remote WebApi von meinem .net Consoleapp verbinden.C# Autorisierung wurde für diese Anforderung verweigert

Trotz der Tatsache, dass mein Programm mit einem Erfolg bekomme ich ein Token, in meiner PostAsync Methode gibt die folgende Meldung:

„Authorization für diese Anforderung wurde verweigert“

Mein Code ist die folgende

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

so gut, weit so dass der Code ein Token und speichert sie im Ergebnis zurückgibt

Der folgende Teil führt Folgendes mit: Mit dem Token, das ich erhielt ich einige Daten

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; 

, warum ich in der test der Meldung „Authorization für diese Anforderung wurde verweigert“ getting bin retrive versuche Fehle ich etwas Wichtiges in meinem Code? Jede mögliche Hilfe würde

+2

Es könnte eine Reihe von Gründen geben, aber ich schätze, es liegt daran, dass zwischen "" Bearer "" und "result.AccessToken" kein Leerzeichen ist. –

+0

@Kirk Danke für die schnelle Antwort, aber es war nicht das, was Sie vorschlagen –

+0

Autorisierung/Bearer ist eine Anfrage Header. –

Antwort

1

Ihre Anfrage geschätzt werden könnte wie folgt aussehen:

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; 

In Ihrem Code Sie versuchen, die Berechtigung Klappentext als String Inhalte zu veröffentlichen, wo es im Request-Header sein sollte.

+0

Wahrscheinlich sind Sie richtig, denn jetzt bekomme ich als Antwort "Interner Serverfehler" –

Verwandte Themen