我想做一个应用程序,让我从discogs查询数据库。
根据API文档,我只需要一个令牌就可以完成这项工作,所以我注册并获得了一个用户令牌。
现在,当我使用postman和https://api.discogs.com/database/search?release_title=nevermind&artist=nirvana&per_page=3&page=1&token=<my_user_token>
时,我收到了我所期望的JSON。
但是当我在C#中使用token创建httpclient时:
public string token = <my_user_token>;
public static HttpClient client { get; set; }
public static async Task InitilizeClient()
{
await GetAccesToken();
}
private static async Task GetAccesToken()
{
client = new HttpClient();
client.DefaultRequestHeaders.Accept.Clear();
client.BaseAddress = new Uri(@"https://api.discogs.com");
//client.DefaultRequestHeaders.Authorization=new AuthenticationHeaderValue("Discogs", "token="+token);
client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization","Discogs token=" + token);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
字符串
然后像这样使用客户端
public static async Task QueryDataBaseAsync(string query)
{
if (query == null)
{
throw new Exception("query is empty");
}
string url = "";
url = @"https://api.discogs.com/database/search?release_title="+query;
if (client == null)
{
await InitilizeClient();
}
using (HttpResponseMessage response = await client.GetAsync(url))
{
if (response.IsSuccessStatusCode)
{
}
else
{
throw new Exception(response.ReasonPhrase + " \n" + response.RequestMessage.ToString());
}
}
}
型
我总是得到:
原因短语“禁止”,“状态代码:403”
当我在我的HttpResponseMessage response
上设置一个断点时,我可以看到在“headers”=>“responsemessage”=>“headers”=>“authorization”下面有我的token。
我做错了什么?
我是编程新手,如果你能解释我做错了什么,我将不胜感激
1条答案
按热度按时间xzlaal3s1#
您可能需要在标题中提供user-agent。沿着这些行:
字符串
就像这样:
型
根据https://www.discogs.com/developers#page:authentication,header:authentication-discogs-auth-flow,您可以在搜索沿着为每个请求提供key+secret。