我尝试使用他们的API和oAuth从uStream获取数据。我可以获取身份验证令牌,该令牌在Rest API Client中可以正常工作,我可以获取数据。然而,我无法在我的项目中获取数据......我一直得到401 unauth ..
代码:
protected void Page_Load(object sender, EventArgs e)
{
var client = new RestClient("https://www.ustream.tv/oauth2/token");
var request = new RestRequest(Method.POST);
request.AddHeader("authorization", "Basic xxxxxxxxxxxxxxxxxx");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", "client_secret=xxxxxxxxxxxxx&client_id=xxxxxxxxxxxx&grant_type=client_credentials&=", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
IRestResponse<TokenObject> response2 = (IRestResponse<TokenObject>)client.Execute<TokenObject>(request);
var tknName = response2.Data.access_token;
GetData(tknName);
}
public void GetData(string token)
{
var client = new RestClient("https://api.ustream.tv/channels/206844441.json");
var request = new RestRequest(Method.GET);
request.AddHeader("authorization", "Bearer" + token);
request.AddHeader("content-type", "application/x-www-form-urlencoded");
IRestResponse jsonResponse = client.Execute(request);
IRestResponse<Channel> json2Response2 = (IRestResponse<Channel>)client.Execute<Channel>(request);
var blah = json2Response2.Content;
}
jsonResponse回来了401 ...但是我可以在像Insomnia这样的API客户端中使用令牌,它可以工作......我可以获取数据。
关于我做错的任何想法?
谢谢!
答案 0 :(得分:1)
假设token
没有前缀单个空格,那么这一行:
request.AddHeader("authorization", "Bearer" + token);
应该是(在Bearer之后添加空格):
request.AddHeader("authorization", "Bearer " + token);
此外,GET
数据请求不需要将Content-Type
标头添加到请求中;虽然包含不太可能导致错误。
答案 1 :(得分:0)
正如João所提到的,主要问题是字符串“Bearer”和令牌本身之间缺少空格字符。解决这个问题后我很确定它会起作用。 是的,Content-Type对于GET请求来说是多余的,但它不会损害您的请求的成功。
此外,您不需要两次提供客户端密钥。这足以通过请求体中的Authorization标头或client_secret属性提供它。
所以,这足以以这种方式提供秘密:
request.AddHeader("authorization", "Basic xxxxxxxxxxxxxxxxxx");
Ant在这种情况下你不应该在请求体中再次提供秘密,这里是修改后的调用,基于原始代码:
request.AddParameter("application/x-www-form-urlencoded", "client_id=xxxxxxxxxxxx&grant_type=client_credentials&=", ParameterType.RequestBody);
答案 2 :(得分:0)
实际上有两件事我错了。 @JoãoAngelo指出的第一个是字符串之间缺失的空间:Bearer&amp;令牌。
第二个也是最令人沮丧的是授权需要授权......与资本A.现在它有效......谢谢你的帮助。