C# HttpClient和设置授权头

C# HttpClient和设置授权头,c#,authentication,httpclient,C#,Authentication,Httpclient,我正在尝试向发出一个简单的请求,我正在按照提供的说明添加一个示例用户代理和我的凭据,但我一直收到403禁止的响应 我的凭证绝对正确,因此是否存在我的请求/凭证设置不正确的情况 这是我所拥有的(删除个人信息): var-httpClient=new-httpClient(); var content=new FormUrlEncodedContent(new[]{new KeyValuePair(“用户代理”,“MyApp[电子邮件地址]”)}); httpClient.DefaultReques

我正在尝试向发出一个简单的请求,我正在按照提供的说明添加一个示例用户代理和我的凭据,但我一直收到
403禁止的
响应

我的凭证绝对正确,因此是否存在我的请求/凭证设置不正确的情况

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

var-httpClient=new-httpClient();
var content=new FormUrlEncodedContent(new[]{new KeyValuePair(“用户代理”,“MyApp[电子邮件地址]”)});
httpClient.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“基本”,
Convert.ToBase64String(ascienceoding.ASCII.GetBytes(string.Format(“{0}:{1}”,“[USERNAME],“[PASSWORD]”)));
var响应=等待httpClient.PostAsync(“https://basecamp.com/[USER ID]/api/v1/projects.json”,内容);
var responseContent=response.Content;
使用(var reader=new StreamReader(wait responseContent.ReadAsStreamAsync()))
{
Console.WriteLine(wait reader.ReadToEndAsync());
}

快速查看他们的文档似乎表明端点在文章正文中接受以下内容:

{
    "name": "This is my new project!",
    "description": "It's going to run real smooth"
}
您正在将
用户代理
作为帖子正文发送。我建议您按如下方式更改代码:

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

这是在DOCS中指定的有效载荷,并将用户代理设置在头文件中,应该是.

是编码而不是IDE,应该可能已经说过:)也请考虑为什么使用< /COD> >将客户端封装成短命<代码>可能是坏的:
    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);
    }