gpt4 book ai didi

c# - 读取 HttpResponseMessage.Content 在读取 webapi 2 token 时抛出 Newtonsoft.Json.JsonReaderException

转载 作者:太空狗 更新时间:2023-10-29 21:09:11 26 4
gpt4 key购买 nike

您好,我写了一段代码,应该从 c# 桌面应用程序登录到 WebAPI 2 站点,一切正常,但我收到 Newtonsoft.Json.JsonReaderException,消息如下

Error reading string. Unexpected token: StartObject. Path '', line 1, position 1.

我的代码如下。

static internal async Task<string> GetBearerToken(string siteUrl, string Username, string Password)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(siteUrl);
client.DefaultRequestHeaders.Accept.Clear();

HttpContent content = new StringContent("grant_type=password&username=" + Username + "&password=" + Password, Encoding.UTF8, "application/x-www-form-urlencoded");

Task<HttpResponseMessage> responseTask = client.PostAsync("Token", content);
HttpResponseMessage response = await responseTask;

if (response.IsSuccessStatusCode)
{
Task<string> message = response.Content.ReadAsAsync<string>();

return await message;
}
else
{
return null;
}
}

fiddler 报告的原始响应消息

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 593
Content-Type: application/json;charset=UTF-8
Expires: -1
Server: Microsoft-IIS/8.0
Set-Cookie: .AspNet.Cookies=vo5b0v_43BLYlfz-rYTZ-TSGi9Rg5jSd9bvKn9693e-Kx3mMI1JVX1Sk-696f_fnPEFPRwFrNWvdMfDWUTWBElfQF3UfcUAxEE5aU5zRgI40sYKapXXnC2ucIiNKCqVsceve0cxNQYVAIr_YhMNjFLRqBX7H3BTPVKGist2AeUkWw6S4VNijx5iQhvWrAvF4xlJSznCiykNqR-QHD_ZLM5-H3GZoghrkvMpr27eXY4mLIqg4lwV2Qah0gQlXnjuWbHHZqLj5HcID1S7_OfPldBE3YqBOR2JxHLITg3yPw3lbXNkHc1UDdG9HExq0faJptz0SBqd8tIeZ7buoJTZ4LHV0TcYSEs4HZ3-Bd84XX7XeWPa5qnTaAJqXaW2FAigD38a9ASr15r5wnzWv9xQxlg; path=/; HttpOnly
X-SourceFiles: =?UTF-8?B?RDpcMDYgUHJvamVjdEphZGVcMDIgU2FuZGJveFwwNCBDbGVhbnVwIEFQSSBBY2NvdW50XENsZWFudXBBUElBY2NvdW50XFRva2Vu?=
X-Powered-By: ASP.NET
Date: Sun, 02 Mar 2014 15:22:57 GMT

{"access_token":"hM_60CprAm6DqCe7qgte1vsnih2d4j1Uy_FDlgoPkEgS_4u0__4lk5KNd0XysTktOfwMw4ffH3uaRmNaFObVnEY3yWS70hio03azUbCrFKk0VNgj31Y0_zLrd-J0ScZ4vzLdtw7KAXtNfcYySKk1EFtJRB4yYcqvobwORC3eu1VHyYInqy7kBgIhAZYE_NZ3zQrrGerZjy__zCuDdRtXO-klkFtg3dONq7cMP_TBi6xLmBjhXlhzUTKGzOrofijlkyMNHF1rx0CgWjhqEx2rJU8Hakq4Bac1pCqoLaYm91DRSrYO--ff4GWlP5wLeqZAhHIA7t17e2pyZXrUT7V1ExBeCnGkWbWoR8Y-QN8ocT7Q3xjydFd4uWSQD5B-Z1bC-nLpUrtkOGZiukl6J3aCJOqeidY6MEM4TMaJZlIp-Oc","token_type":"bearer","expires_in":1209599,"userName":"Alice",".issued":"Sun, 02 Mar 2014 15:22:57 GMT",".expires":"Sun, 16 Mar 2014 15:22:57 GMT"}

我怀疑 json 解析器期望的消息格式与它得到的消息格式不同。我不想更改 webapi 站点,所以我可能必须更改客户端实现。我不知道我必须改变什么或我必须看哪里。

最佳答案

经过一番激烈的谷歌搜索后,我的代码开始工作了。

我做的第一件事是添加了一个额外的类来存储 token 。

class TokenResponseModel
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }

[JsonProperty("token_type")]
public string TokenType { get; set; }

[JsonProperty("expires_in")]
public int ExpiresIn { get; set; }

[JsonProperty("userName")]
public string Username { get; set; }

[JsonProperty(".issued")]
public string IssuedAt { get; set; }

[JsonProperty(".expires")]
public string ExpiresAt { get; set; }
}

之后我将我的代码更改为以下代码。

static internal async Task<TokenResponseModel> GetBearerToken(string siteUrl, string Username, string Password)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(siteUrl);
client.DefaultRequestHeaders.Accept.Clear();

HttpContent requestContent = new StringContent("grant_type=password&username=" + Username + "&password=" + Password, Encoding.UTF8, "application/x-www-form-urlencoded");

HttpResponseMessage responseMessage = await client.PostAsync("Token", requestContent);

if (responseMessage.IsSuccessStatusCode)
{
string jsonMessage;
using (Stream responseStream = await responseMessage.Content.ReadAsStreamAsync())
{
jsonMessage = new StreamReader(responseStream).ReadToEnd();
}

TokenResponseModel tokenResponse = (TokenResponseModel)JsonConvert.DeserializeObject(jsonMessage, typeof(TokenResponseModel));

return tokenResponse;
}
else
{
return null;
}
}

我现在可以从客户端的 WebAPI 2 站点获取不记名 token ,这样我就可以将它添加到 future 的请求中。我希望它对其他人有帮助。

关于c# - 读取 HttpResponseMessage.Content 在读取 webapi 2 token 时抛出 Newtonsoft.Json.JsonReaderException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22130411/

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