2017-06-09 3 views
0

Nachdem ich ein Zugriffstoken von meinem API erhalten, ich rufe diese Methode:Mit RestSharp, wie führe ich eine POST-Anfrage an meine ASP.NET Web API mit einem oAuth2 Bearer Token aus?

[Authorize] 
[HttpPost] 
public HttpResponseMessage BatchGeocode([FromBody] InputDataClass inputData) 
{ 
    //do stuff, return a HttpResponseMessage 
} 

ich den Antrag stellen und erhalten die erwartete Antwort mit Postman wie folgt aus:

HTTP request using Postman

Ich versuche, die gleiche API-Methode in einer Anwendung mit RestSharp aufzurufen, wobei dieselbe URL und Eingabedaten wie oben verwendet werden:

var client = new RestClient(url); 

var request = new RestRequest(Method.POST); 
request.RequestFormat = DataFormat.Json; 
request.AddHeader("Content-Type", "application/json"); 
request.AddHeader("Authorization", "Bearer " + accessToken);  
request.Parameters.Clear(); 
request.AddParameter("application/json", JsonConvert.SerializeObject(apiInput), ParameterType.RequestBody); 

Wo ist apiInput ist mein Objekt, das den API-Eingabeparameter entspricht - wenn serialisiert mit JsonConvert.SerializeObject() ich bekomme eine Zeichenfolge identisch mit dem, was im Körper meiner API-Anfrage über Postman verwendet wird.

Wenn diese Meldung ausgeführt wird, bekomme ich zurück "Autorisierung wurde für diese Anfrage verweigert." Mein Unterbrechungspunkt in der API, die ich lokal ausgeführt habe, wird nicht getroffen, was mich dazu bringt zu glauben, dass ich meine Anfrage in der aufrufenden Anwendung nicht richtig strukturiere. Wie führe ich mit RestSharp eine POST-Anfrage an meine ASP.NET-Web-API mit einem oAuth2-Bearer-Token aus?

+1

Hmmmm - haben Sie ein Tool wie 'Fiddler 4' probiert, um die Anfrage zu erfassen und zu überprüfen, dass RestSharp das Token tatsächlich passend hinzufügt? Es könnte so einfach sein wie die Zeichenfolge im Token ist falsch –

+1

Ja, es sieht aus wie die Anfrage von RestSharp ist nicht ganz gleich. [Hier ist das Diff] (http://www.diff-online.com/view/593b2b65482b0) zwischen den beiden Anfragen im Vergleich in Fiddler. Es sieht so aus, als ob der "Authorization" -Header nicht in der RestSharp-Anfrage enthalten ist - das ist mir nicht ganz klar. Ich konnte keine anwendbaren Beispiele oder Dokumentationen zur Verwendung eines Bearer-Tokens mit einem Autorisierungsheader in einer RestSharp-Anforderung finden. –

Antwort

3

Bei einer oberflächlichen Suche scheint es, dass Sie die Überladung möglicherweise mit dem Wert ParameterType aufrufen müssen.

request.AddParameter("Authorization", "Bearer " + accessToken, ParameterType.HttpHeader); 

Dass gesagt wird es scheint auch, dass RestSharp Sie eine andere Methode verwenden möchten Authentifizierung (source) durchzuführen, aber das sprengt den Rahmen meines Wissens mit RestSharp.

+1

Danke für diesen Link zur vorherigen Frage - es ist genau das, was ich brauchte. Ich habe das Autorisierungs-Token als Parameter zur Anfrage hinzugefügt und kann nun die Anfrage ausführen und die erwartete Antwort erhalten. –

Verwandte Themen