我正在尝试向Basecamp API提出一个简单的请求,我正在按照提供的说明添加示例用户代理和我的凭据,但我一直收到403 Forbidden
回复.
我的凭据肯定是正确的,所以我的请求/凭据设置不正确的情况?
这就是我所拥有的(删除个人信息):
var httpClient = new HttpClient(); var content = new FormUrlEncodedContent(new[] { new KeyValuePair("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()); }
Dean Ward.. 17
快速浏览一下他们的文档似乎表明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); }
这将按照文档中的指定过帐有效负载,并将用户代理设置在标头中.