响应状态代码不指示成功:401 Tumblr

本文关键字:Tumblr 成功 指示 状态 代码 响应 | 更新日期: 2023-09-27 18:30:46

我想实现对Tumblr的授权。在接待期间access_token这样

string request_url =
                 "https://www.tumblr.com/oauth/access_token" + "?" +
                 "oauth_consumer_key=" + oauth_consumer_key + "&" +
                 "oauth_token=" + main_oauth_token + "&" +
                 "oauth_signature_method=" + "HMAC-SHA1" + "&" +
                 "oauth_signature=" + Uri.EscapeDataString(oauth_signature) + "&" +
                 "oauth_timestamp=" + oauth_timestamp + "&" +
                 "oauth_nonce=" + oauth_nonce + "&" +
                 "oauth_version=" + "1.0" + "&" +
                 "oauth_verifier=" + oauth_verifier;
                HttpClient httpClient = new HttpClient();
                string responseBodyAsText = await httpClient.GetStringAsync(request_url);

我收到以下错误:

mscorlib.ni 中发生了类型为"System.Net.Http.HttpRequestException"的异常.dll但未在用户代码中处理

其他信息:响应状态代码不指示 成功:401(未经授权)。

我设置了回调 URL。可能是什么问题?

响应状态代码不指示成功:401 Tumblr

问题是您正在发送 GET 请求。根据规范,您必须将 POST 与标头 ContentType: application/x-www-form-urlencoded 一起使用。有关使用 HttpClient 执行此操作的良好示例,请参阅此处。请注意,您的名称/值对不是 URL 的一部分,即使它们像查询字符串一样编码。

或者,如果你不介意库依赖,你可以试试我的 Flurl 库,它将代码缩短为:

string responseBodyAsText = await "https://www.tumblr.com/oauth/access_token"
    .PostUrlEncodedAsync(new { 
        oauth_consumer_key = oauth_consumer_key,
        oauth_token = main_oauth_token,
        oauth_signature_method = "HMAC-SHA1",
        oauth_signature = oauth_signature,
        oauth_timestamp = oauth_timestamp,
        oauth_nonce = oauth_nonce,
        oauth_version = "1.0",
        oauth_verifier = oauth_verifier
    })
    .ReceiveString();

Flurl 在 NuGet 上可用。

EnsureSuccessStatusCode()也会生成相同的错误。检查您是否正在使用它,如果是,请确保您的服务器身份验证正确无误。