0

基本的に、REST APIオンラインに接続しようとしています。簡単ですよね?

ただし、接続しようとするたびに 401 (Unauthorized) エラーが発生します。これをテストするために C# コンソール アプリを使用しています。また、PUTMAN (HTTP 要求を表示するための Google Chrome アプリ) も使用してみました。

私が使用している API へのリンクは次のとおりです: https://community.dynatrace.com/community/display/APMSAASDOC/Login+-+REST+API

リストされているすべての手順に従います。ユーザー名とパスワードが正しいことはわかっています (Dynatrace ポータルにログインしました)。誰が何が間違っているのか考えていますか? 以下は私のコードです(明らかな理由により、実際のユーザー名とパスワードを削除しました):

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));
                }
            }



        }
4

3 に答える 3

2

HTTP/1.1メソッド呼び出しの最後の文字列は、client.GetAsyncおそらく変換されているpassword=MYPASSWORD%20HTTP/1.1(または同様のもの) ため、エラーが発生します。それを削除してみて、それが機能するかどうかを確認してください。

注: %20は urlencoded スペースです

別のオプションこの投稿への回答は関連している可能性があります。要約すると、要求をフォーマットするには、BaseAddress の末尾にスラッシュが必要であり、GetAsync文字列がスラッシュで始まらないようにする必要があるようです。

于 2015-06-30T21:47:57.737 に答える
0

GET URL の末尾から「HTTP/1.1」を削除します。これはパスワードの末尾に追加されるため、401

于 2015-06-30T21:54:21.270 に答える