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).
3 Réponses :
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 .
var data = new Dictionary<string, string>
{
{"grant_type", "password"},
{"username", "username"},
{"password", "password"}
};
var content = new FormUrlEncodedContent(data);
client.PostAsync(Url, content);
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.
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");
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
Je vous ai donné une réponse basée sur HttpClient. Vérifiez s'il vous plaît.