C# 401(未经授权)尝试访问REST API时

C# 401(未经授权)尝试访问REST API时,c#,api,rest,dynatrace,C#,Api,Rest,Dynatrace,因此,基本上,我正在尝试在线连接RESTAPI。很简单,对吧 但是,每当我尝试连接时,就会出现401(未经授权)错误。我正在使用一个C#控制台应用程序来测试这一点,我还尝试使用PUTMAN(谷歌Chrome应用程序来查看HTTP请求) 以下是我正在使用的API的链接: 我遵循列出的所有步骤。我知道我的用户名和密码是正确的(已登录Dynatrace门户)。有人知道什么地方可能出错吗?下面是我的代码(出于明显的原因,我删除了实际的用户名和密码): 客户端.GetAsync方法调用末尾的HTTP/1.

因此,基本上,我正在尝试在线连接RESTAPI。很简单,对吧

但是,每当我尝试连接时,就会出现401(未经授权)错误。我正在使用一个C#控制台应用程序来测试这一点,我还尝试使用PUTMAN(谷歌Chrome应用程序来查看HTTP请求)

以下是我正在使用的API的链接:

我遵循列出的所有步骤。我知道我的用户名和密码是正确的(已登录Dynatrace门户)。有人知道什么地方可能出错吗?下面是我的代码(出于明显的原因,我删除了实际的用户名和密码):


客户端.GetAsync方法调用末尾的
HTTP/1.1
字符串可能被转换为
password=MYPASSWORD%20HTTP/1.1
(或类似)导致错误。试着移除它,看看它是否有效

注意:
%20
是URL编码的空间


另一个选项的答案可能与此相关。总之,格式化请求似乎需要BaseAddress后面有一个斜杠,并且
GetAsync
字符串不能以斜杠开头。

客户端末尾的
HTTP/1.1
字符串。GetAsync方法调用可能被翻译成
password=MYPASSWORD%20HTTP/1.1
(或类似)导致错误。请尝试删除该错误,然后查看其是否有效

注意:
%20
是URL编码的空间


另一个选项的答案可能与之相关。总而言之,格式化请求似乎要求基地址后面有一个斜杠,并且
GetAsync
字符串不以斜杠开头。

客户端末尾的
HTTP/1.1
字符串。GetAsync方法调用可能正在执行已翻译为导致错误的
password=MYPASSWORD%20HTTP/1.1
(或类似版本)。请尝试将其删除,然后查看是否有效

注意:
%20
是URL编码的空间


另一个选项的答案可能与之相关。总而言之,格式化请求似乎要求基地址后面有一个斜杠,并且
GetAsync
字符串不以斜杠开头。

客户端末尾的
HTTP/1.1
字符串。GetAsync方法调用可能正在执行已翻译为导致错误的
password=MYPASSWORD%20HTTP/1.1
(或类似版本)。请尝试将其删除,然后查看是否有效

注意:
%20
是URL编码的空间



另一个选项的答案可能与之相关。总而言之,格式化请求似乎要求基地址后面有一个斜杠,并且
GetAsync
字符串不以斜杠开头。

删除“HTTP/1.1”从GET url的末尾开始,它被添加到密码的末尾,因此401从GET url的末尾删除“HTTP/1.1”,它被添加到密码的末尾,因此401从GET url的末尾删除“HTTP/1.1”,它被添加到密码的末尾,因此401从GET url的末尾删除“HTTP/1.1”从你的GET url的末尾开始,它被添加到你密码的末尾,因此401

为大家的头痛感到抱歉。问题是公司本身的帐户问题。我联系了他们,他们注意到问题是帐户从旧门户迁移到新门户。因此,我们的端没有问题。感谢您的支持帮助所有人!

为大家的头痛感到抱歉。问题是公司本身的帐户问题。我联系了他们,他们注意到问题是帐户从旧门户迁移到新门户。因此,我们的端没有问题。感谢大家的帮助!

为大家的头痛感到抱歉。问题是ac公司本身存在问题。我联系了他们,他们发现问题在于将帐户从旧门户迁移到新门户。因此,我们的终端没有问题。感谢大家的帮助!

对大家的头痛表示抱歉。问题是公司本身的帐户问题。我联系了他们,他们注意到了问题问题在于将帐户从旧门户迁移到新门户。因此,我们的终端没有问题。谢谢大家的帮助!

如果您要传递授权标题,为什么要在URL中包含用户名/密码。为什么要传递
授权
标题?我从另一个团队成员那里获取了此代码;我我已经尝试注释出授权标题,我想这没有什么区别。如果您正在传递授权标题,为什么要在URL中包含用户名/密码。为什么要传递
授权
标题?我从另一个团队成员那里获取了此代码;我已经尝试注释出授权标题,并且我想t没有什么区别。如果你要传递授权标题,为什么要在URL中包含用户名/密码。为什么你要传递
授权
标题?我从另一个团队成员那里得到了这段代码;我试着注释授权标题,我想这没有什么区别。如果你要传递Authorization header,你为什么要在URL中包含用户名/密码。你为什么要传递
授权
header?我从另一个团队成员那里获得了此代码;我尝试过注释授权标题,我想这没有什么区别。不幸的是,它不起作用:/我以前认为它可能是专业的也有问题,但没有区别。不幸的是,它不起作用:/我以前认为它可能也是问题,但没有区别。不幸的是,它不起作用:/我以前认为它可能也是问题,但没有区别。不幸的是
static async Task RunAsync()
    {
        string _user;
        string _password;
        string _authorizationType;
        string _contentType;
        string _CredentialsToBase64;
        string _url = "https://datafeed-api.dynatrace.com";

        _user = "MYUSERNAME";
        _password = "MYPASSWORD";
        _authorizationType = "basic";
        _contentType = "application/json";
        _CredentialsToBase64 = System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(_user + ":" + _password));


        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(_url);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(_contentType));
            client.DefaultRequestHeaders.Add("Authorization", _authorizationType + " " + _CredentialsToBase64);

            using (HttpResponseMessage httpResponse = await client.GetAsync("publicapi/rest/v1.0/login?user=MYUSERNAME&password=MYPASSWORD HTTP/1.1"))
            {
                if (httpResponse.IsSuccessStatusCode)
                {
                    Console.WriteLine("Success");
                }
                else
                {
                    Console.WriteLine(string.Format("Service request failed ({0})", httpResponse.StatusCode));
                }
            }



        }