Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用API函数时出错;用户/获取“活期”账户:必须提供HTTP头“;“授权”;或URL参数";“授权”;_C#_Win Universal App_Dropbox Api - Fatal编程技术网

C# 调用API函数时出错;用户/获取“活期”账户:必须提供HTTP头“;“授权”;或URL参数";“授权”;

C# 调用API函数时出错;用户/获取“活期”账户:必须提供HTTP头“;“授权”;或URL参数";“授权”;,c#,win-universal-app,dropbox-api,C#,Win Universal App,Dropbox Api,我在Dropbox API上开发,使用C#universal应用程序 public async Task<string> Httpclient(string link) { HttpClient client = new HttpClient(); HttpResponseMessage response= await client.GetAsync(link); return await response.Content.ReadAsStringAsync(

我在Dropbox API上开发,使用C#universal应用程序

public async Task<string> Httpclient(string link) {
    HttpClient client = new HttpClient();
    HttpResponseMessage response= await client.GetAsync(link);
    return await response.Content.ReadAsStringAsync();
}

public async Task<Model.Get_Current_Account.RootObject> get_current_account(string _accessToken) {
    var query = await mainViewModel.Httpclient("https://api.dropboxapi.com/2/users/get_current_account?access_token="+_accessToken);
    if (query != null) {
        var get_data = JsonConvert.DeserializeObject<Model.Get_Current_Account.RootObject>(query);
        return get_data;
    } else
        return null;
}
公共异步任务Httpclient(字符串链接){
HttpClient=新的HttpClient();
HttpResponseMessage response=wait client.GetAsync(link);
return wait response.Content.ReadAsStringAsync();
}
公共异步任务获取当前帐户(字符串\u accessToken){
var query=await mainViewModel.Httpclient(“https://api.dropboxapi.com/2/users/get_current_account?access_token=“+_accessToken);
if(查询!=null){
var get_data=JsonConvert.DeserializeObject(查询);
返回get_数据;
}否则
返回null;
}
var查询
产生错误:

调用API函数“users/get_current_account”时出错:必须提供HTTP头“Authorization”或URL参数“Authorization”

阅读dropbox表明您应该传递一个授权头(与您收到的错误相匹配)


Authorization:Bearer演示如何将头添加到HttpClient

而不是使用
HttpClient
,尝试使用
HttpWebRequest
并设置API正在查找的HTTP头:

public async Task<string> Httpclient(string link, string token)
{
    try
    {
        var request = (HttpWebRequest)WebRequest.Create(link);
        request.Accept = "application/json";
        request.Headers.Add(
            HttpRequestHeader.Authorization, 
            string.concat("Bearer ", token));
        request.Method = "get";
        var response = await request.GetResponseAsync();
        var stream = response.GetResponseStream();
        if (stream != null)
        {
            using (var reader = new StreamReader(stream))
            {
                return reader.ReadToEnd();
            }
        }
        else return string.Empty;
    }
    catch { return string.Empty; }
}
公共异步任务Httpclient(字符串链接、字符串令牌)
{
尝试
{
var request=(HttpWebRequest)WebRequest.Create(link);
request.Accept=“application/json”;
request.Headers.Add(
HttpRequestHeader.Authorization,
string.concat(“承载者”,令牌));
request.Method=“get”;
var response=wait request.GetResponseAsync();
var stream=response.GetResponseStream();
if(流!=null)
{
使用(变量读取器=新的流读取器(流))
{
返回reader.ReadToEnd();
}
}
否则返回字符串。空;
}
catch{return string.Empty;}
}
这会让你朝着正确的方向前进


您需要提供
令牌
数据才能成功进行授权。

谢谢,但需要一个“方法”POST。(method=“get”)这是正确的。根据您发布的错误消息,另一个选项是使用“authorization”URL参数,而不是代码中使用的“access\u token”URL参数。此外,该方法应该是POST,而不是GET,但这是另一个问题。
public async Task<string> Httpclient(string link, string token)
{
    try
    {
        var request = (HttpWebRequest)WebRequest.Create(link);
        request.Accept = "application/json";
        request.Headers.Add(
            HttpRequestHeader.Authorization, 
            string.concat("Bearer ", token));
        request.Method = "get";
        var response = await request.GetResponseAsync();
        var stream = response.GetResponseStream();
        if (stream != null)
        {
            using (var reader = new StreamReader(stream))
            {
                return reader.ReadToEnd();
            }
        }
        else return string.Empty;
    }
    catch { return string.Empty; }
}