C# non pris en charge type de subvention lors de l'appel de l'api web
Je suis en train d'effectuer un Post pour mon WebAPI à partir d'un c# WPF application de bureau.
Peu importe ce que je fais, je reçois
{"error":"unsupported_grant_type"}
C'est ce que j'ai essayé (et j'ai essayé tout ce que j'ai pu trouver):
Également dev web api actuellement active pour les essais de: http://studiodev.biz/
base http client de l'objet:
var client = new HttpClient()
client.BaseAddress = new Uri("http://studiodev.biz/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
avec la suivante envoyer méthodes:
var response = await client.PostAsJsonAsync("token", "{'grant_type'='password'&'username'='username'&'password'='password'");
var response = await client.PostAsJsonAsync("token", "grant_type=password&username=username&password=password");
Après cet échec, j'ai fait quelques recherches sur google et essayé:
LoginModel data = new LoginModel(username, password);
string json = JsonConvert.SerializeObject(data);
await client.PostAsync("token", new JsonContent(json));
même résultat, j'ai donc essayé:
req.Content = new StringContent(json, Encoding.UTF8, "application/x-www-form-urlencoded");
await client.SendAsync(req).ContinueWith(respTask =>
{
Application.Current.Dispatcher.Invoke(new Action(() => { label.Content = respTask.Result.ToString(); }));
});
Note: je peux faire un appel réussi avec google Chrome.
Mise À Jour Fiddler Résultat
Quelqu'un pourrait-il svp m'aider à faire un appel réussi à le au-dessus de l'api web...
S'il vous plaît laissez-moi savoir si je peut aider à clarifier.
Merci!!
- Avez-vous essayé d'utiliser un violon pour repérer la différence entre l'appel à partir de Chrome et de les appeler à partir de votre application WPF?
- J'ai, veuillez consulter la mise à jour. J'ai tout essayé de reproduire le résultat. S'il vous plaît aider.
Vous devez vous connecter pour publier un commentaire.
Le défaut de mise en œuvre de
OAuthAuthorizationServerHandler
accepte uniquement le formulaire de codage (c'est à direapplication/x-www-form-urlencoded
) et pas d'encodage JSON (application/JSON
).De votre demande
ContentType
devrait êtreapplication/x-www-form-urlencoded
et de transmettre les données dans le corps comme:c'est à dire pas au format JSON.
Le chrome exemple ci-dessus fonctionne, car il n'est pas de transmettre les données en JSON. Vous avez seulement besoin de cela pour l'obtention d'un jeton; pour d'autres méthodes de l'API, vous pouvez utiliser JSON.
Ce genre de problème est également abordé ici.
1) Note de l'URL: "localhost:55828/jeton" (pas de "localhost:55828/API/token")
2) Note de la demande de données. Elle n'est pas dans un format json, c'est juste de la plaine de données sans guillemets.
"[email protected]&mot de passe=Test123$&grant_type=mot de passe"
3) Remarque: le type de contenu. Content-Type: application/x-www-form-urlencoded' (pas Content-Type: application/json')
4) Lorsque vous utilisez javascript pour faire une requête post, vous pouvez utiliser les éléments suivants:
Voir les captures d'écran ci-dessous à partir Facteur:
Voici un exemple que j'ai utilisé pour faire cette demande de mon local de l'API Web de l'application en cours d'exécution sur le port 43305 à l'aide de SSL. J'ai mis le projet sur GitHub ainsi.
https://github.com/casmer/WebAPI-getauthtoken
Si vous utilisez RestSharp, vous devez en faire la demande comme ceci:
Avait même questions mais seulement résolu la mienne sur HTTP sécurisé pour le jeton URL. Voir l'exemple de httpclient code. HTTP ordinaire juste arrêter de travailler après la maintenance du serveur