3
votes

Comment appeler l'API Rest avec du contenu et des en-têtes en c #?

J'essaie d'appeler l'API Rest avec du contenu et des en-têtes en c #. En fait, j'essaie de convertir en c # à partir du code Python qui est:

HttpClient client = new HttpClient();
client.BaseAddress = new Uri(Url);

var tmp = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    Content =
            {

            }
     };

    var result = client.PostAsync(Url, tmp.Content).Result;
}

Jusqu'à présent, j'essaye avec:

import requests
url = 'http://url.../token'
payload = 'grant_type=password&username=username&password=password'
headers = {
  'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request('POST', url, headers = headers, data = payload, allow_redirects=False)
print(response.text)

Je n'ai pas idée comment mettre à partir des en-têtes de code Python (Content-Type) et une chaîne supplémentaire (payload).


1 commentaires

Je vous ai donné une réponse basée sur HttpClient. Vérifiez s'il vous plaît.


3 Réponses :


2
votes

Si vous utilisez RestSharp , vous devriez pouvoir appeler votre service avec le code suivant extrait

var client = new RestClient("http://url.../token");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", "grant_type=password&username=username&password=password", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var result = response.Content;

J'ai basé ma réponse sur la réponse de cette réponse .


0 commentaires

2
votes
var data = new Dictionary<string, string>
{
    {"grant_type", "password"},
    {"username", "username"},
    {"password", "password"}
};
var content = new FormUrlEncodedContent(data);
client.PostAsync(Url, content);

3 commentaires

Quelle référence dois-je utiliser pour "HttpFormUrlEncodeContent"?


Windows.Web.Http.dll. J'ai également ajouté du code pour les API .net normales.


Vous avez donné l'impression que vous ne pouvez pas spécifier vos données et vos en-têtes en même temps. Ce n'est pas correct.



2
votes

Voici un exemple que j'utilise dans l'une de mes applications:

_client = new HttpClient { BaseAddress = new Uri(ConfigManager.Api.BaseUrl), Timeout = new TimeSpan(0, 0, 0, 0, -1) };

      _client.DefaultRequestHeaders.Accept.Clear();
      _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_client.DefaultRequestHeaders.Add("Bearer", "some token goes here");


3 commentaires

Oui, quelque chose comme ça, comment avez-vous résolu des paramètres tels que timeout = undefined et allow_redirects = False


@DaniKR comme ceci: _client = new HttpClient {BaseAddress = new Uri (ConfigManager.Api.BaseUrl), Timeout = new TimeSpan (0, 0, 0, 0, -1)};


Spécifiez simplement le délai que vous souhaitez