gpt4 book ai didi

调用 web api 时 C# 不支持授权类型

转载 作者:IT王子 更新时间:2023-10-29 03:46:20 24 4
gpt4 key购买 nike

我正在尝试从 c# WPF 桌面应用程序向我的 WebAPI 执行发布。

无论我做什么,我都会得到

{"error":"unsupported_grant_type"}

这是我尝试过的(我已经尝试了我能找到的一切):

还开发了当前正在测试的 web api:http://studiodev.biz/

基础 http 客户端对象:

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("*/*"));

使用以下发送方法:

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");

失败后,我做了一些谷歌搜索并尝试:

LoginModel data = new LoginModel(username, password);
string json = JsonConvert.SerializeObject(data);
await client.PostAsync("token", new JsonContent(json));

同样的结果,所以我尝试了:

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(); }));
});

注意:我可以用 Chrome 成功调用。

更新 Fiddler 结果

enter image description here

有人可以帮我成功调用上面的 web api ...如果我可以帮助澄清,请告诉我。谢谢!!

最佳答案

OAuthAuthorizationServerHandler 的默认实现只接受表单编码(即 application/x-www-form-urlencoded)而不是 JSON 编码(application/JSON)。

您的请求的 ContentType 应该是 application/x-www-form-urlencoded 并在正文中传递数据:

grant_type=password&username=Alice&password=password123

不是 JSON 格式

上面的 chrome 示例之所以有效,是因为它没有将数据作为 JSON 传递。你只需要这个来获得 token ;对于 API 的其他方法,您可以使用 JSON。

这种问题也有讨论here .

关于调用 web api 时 C# 不支持授权类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29246908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com