且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Google API Oauth2 刷新令牌错误请求 400

更新时间:2022-06-19 07:03:54

已修复.2 个问题:

1 DefaultRequestHeader 不起作用.

1 The DefaultRequestHeader did not work.

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(GoogleOAuth.AccessToken, GoogleOAuth.AccessTokenType);

即使对象本身看起来不错,它也不起作用.我用那个替换了它:

Even when the object itself did look alright it did not work. I replaced it with that:

HttpClient client = new HttpClient();
var requestMessage = new HttpRequestMessage(HttpMethod.Post, calenderUri);
requestMessage.Headers.Authorization = new AuthenticationHeaderValue(GoogleOAuth.AccessTokenType, GoogleOAuth.AccessToken); // both are strings. ("Bearer", "yaa...")
requestMessage.Content = data;
var response = await client.SendAsync(requestMessage);

if (!response.IsSuccessStatusCode)
{
string content = await response.Content.ReadAsStringAsync();
throw new Exception(content);
}

之后我只需要再做一件事

After that I only had to do one more thing

2 删除了代码";和client_secret"从请求数据.结果:

2 Removed "code" and "client_secret" from the request data. The result:

using (HttpClient client = new HttpClient())
{
    var googleData = new Dictionary<string, string>();
    googleData.Add("client_id", GoogleOAuth.ClientId);
    googleData.Add("refresh_token", GoogleOAuth.RefreshToken);
    googleData.Add("grant_type", "refresh_token");

    var data = new FormUrlEncodedContent(googleData);

    var requestMessage = new HttpRequestMessage(HttpMethod.Post, Constants.GoogleTokenUri);
    requestMessage.Headers.Authorization = new AuthenticationHeaderValue(GoogleOAuth.AccessTokenType, GoogleOAuth.AccessToken);
    requestMessage.Content = data;
    var response = await client.SendAsync(requestMessage);

    if (response.IsSuccessStatusCode)
    {
        // do something
    }
}

几个星期以来,我试图让它运行,但几乎是疯狂.希望这能拯救某人的神经.

For weeks I tried to get it running and was close to insanity. Hope this saves someones nerves.