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.