httpClient 200 ответ, но пустое тело? - PullRequest
0 голосов
/ 04 июля 2019

Я использую httpClient для доступа к URL-адресу, содержащему данные JSON для Jira. Я проверил доступ к странице, и HttpResponseMessage возвращает код 200.

Когда я перехожу непосредственно к URL и логину, который также разрешает содержимое.

Однако, когда я пытаюсь прочитать тело ответа, я ничего не получаю, так как оно пустое. Я не уверен, что я делаю неправильно! Я действительно застрял, поэтому любая помощь будет оценена!

Первоначальная попытка внизу - я также удалил .Result и попытался просто использовать ответ GetStringAsync, как это, но без радости - response2 все еще пуст :(

        var client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{token}")));
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = client.GetAsync(uri).Result; 


        var response2 = await client.GetStringAsync(uri);


        //Checking that the response is returning a 200
        if (response.IsSuccessStatusCode)
        {
            resultsTest.InnerHtml += "Success :)" + response.ToString();

        }
        else
        {
            resultsTest.InnerHtml += "Failed :( ";
        }

Исходный код до внесения изменений в связи с комментариями ниже: Я попытался прочитать тело ответа тремя различными способами (помеченными в комментариях!):

    protected void Page_Load(object sender, EventArgs e)
    {
        testAsync();
    }

    protected async System.Threading.Tasks.Task testAsync()
    {
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

        //var confString = "https://myUrl.co.uk/rest/api/content?expand=body.view&limit=500&start=1&type=page";
        var uriString = "https://myUrl.co.uk/rest/api/2/search?jql=project=RES&fields=key,summary&maxResults=1000&startAt=0";
        var uri = new Uri(uriString);

        var username = "bob";
        var token = "bob";

        var client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{token}")));
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = client.GetAsync(uri).Result; 

        //First attempt to read content body
        string res = "";
        using (HttpContent content = response.Content)
        {
            // ... Read the string.
            Task<string> result = content.ReadAsStringAsync();
            res = result.Result;
            resultsTest.InnerHtml += "------";
            resultsTest.InnerHtml += res;

        }

        //Second attempt to get the body to return as a string: 
        var contents = response.Content.ReadAsStringAsync().Result;
        resultsTest.InnerHtml += contents.ToString();

        //Third attempt to get the body of the response
        using (HttpContent content = response.Content)
        {
            // ... Read the string.
            string result = await content.ReadAsStringAsync();

            // ... Display the result.
            if (result != null &&
                result.Length >= 50)
            {
                Console.WriteLine(result.Substring(0, 50) + "...");
                resultsTest.InnerHtml += "*************"; 
            }
        }




        //Checking that the response is returning a 200
        if (response.IsSuccessStatusCode)
        {
            resultsTest.InnerHtml += "Success :)" + response.ToString();

        }
        else
        {
            resultsTest.InnerHtml += "Failed :( ";
        }

    }
...