【问题标题】:HttpClient and setting Authorization headersHttpClient 和设置授权标头
【发布时间】:2014-07-07 11:33:22
【问题描述】:

我正在尝试向Basecamp API 发出一个简单的请求,我正在按照提供的说明添加示例用户代理和我的凭据,但我不断收到403 Forbidden 回复。

我的凭据绝对正确,是否是我的请求/凭据设置不正确?

这是我所拥有的(已删除个人信息):

var httpClient = new HttpClient();
var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("User-Agent", "MyApp [EMAIL ADDRESS]") });

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
            Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "[USERNAME]", "[PASSWORD]"))));

var response = await httpClient.PostAsync("https://basecamp.com/[USER ID]/api/v1/projects.json", content);
var responseContent = response.Content;

using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync()))
{
     Console.WriteLine(await reader.ReadToEndAsync());
}

【问题讨论】:

    标签: c# authentication httpclient


    【解决方案1】:

    快速浏览他们的文档似乎表明projects.json 端点在 POST 正文中接受以下内容:

    {
        "name": "This is my new project!",
        "description": "It's going to run real smooth"
    }
    

    您将 User-Agent 作为 POST 正文发送。我建议您将代码更改如下:

        var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "[USERNAME]", "[PASSWORD]")));
        using (var httpClient = new HttpClient())
        {
            httpClient.DefaultRequestHeaders.Add("User-Agent", "MyApp [EMAIL ADDRESS]");
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
            var response = await httpClient.PostAsJsonAsync(
                "https://basecamp.com/[USER ID]/api/v1/projects.json",
                new {
                    name = "My Project",
                    description = "My Project Description"
                });
    
            var responseContent = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseContent);
        }
    

    这会按照文档中的说明发布有效负载,并将您的用户代理设置为应有的标题。

    【讨论】:

    猜你喜欢
    • 2013-01-15
    • 2018-08-28
    • 1970-01-01
    • 2021-11-21
    • 2015-12-02
    相关资源
    最近更新 更多