1

Вопрос по c#, dotnet-httpclient, windows-phone-7, asynchronous, nuget – Почему HttpClient всегда дает мне один и тот же ответ?

Среда:
VS2012 Обновление 4
Windows Phone 8 SDK
новый проект Windows Phone на основе WP OS 7.1
NuGet pack1: MS Async
NuGet pack2: MS HttpClient


Что делает проект
один тест для API форума:
создать новую тему на форуме и обновить JSON, чтобы проверить, накапливается ли «счет».


Что такое интерфейс

1-й текстовый блок:
ответ JSON будет отображаться здесь

3 кнопки:
[обновить JSON]: использовать API1 для обновления списка тем
[Новое сообщение]: используйте API2 для создания новой темы на форуме, название и текст будут отображаться ниже
[IE]: открыть json в IE, использовать API1

Информация о потоке:
тема, которую вы только что опубликовали, использует кнопку [Новая запись]


Что означает JSON
нужно только сосредоточиться на 2 части
count: 244 ---> Всего тем на форуме
«57923» ---> заголовок 1-го потока (поле «data» является массивом списка потоков)


Что такое процедура испытаний?
1. откройте приложение
2. нажмите [обновить JSON], чтобы получить список
3. запомните часть «count» и «title» 1-го потока
4. нажмите [New Post], чтобы создать новую тему, название темы будет отображаться ниже
5. нажмите [обновить JSON], чтобы увидеть список последних тем
6. Ожидается: "count" накапливается на 1, а часть "title" должна быть такой же, как показано ниже.


Проблема:
1. после нажатия [Новая запись], независимо от того, сколько раз вы нажали [обновить JSON], счет не будет накапливаться!

2. но откройте URL в Chrome (Desktop), вы увидите, что JSON уже обновлен!

3. закройте приложение и снова откройте его, нажмите [обновить JSON], JSON будет обновлен, как и ожидалось, но когда вы публикуете новую тему, проблема возникает снова


Почему и как это решить?


Код

private async void RefreshJSONButton_Click(object sender, RoutedEventArgs e)
{
    this.JsonView.Text = string.Empty;
    HttpClient client = new HttpClient();
    string url =
        "API1 Address Here";
    string x = await client.GetStringAsync(url);
    this.JsonView.Text = x;
    client.Dispose();
}

private async void NewPostButton_Click_1(object sender, RoutedEventArgs e)
{
    Random rnd = new Random();
    this.num = rnd.Next(1, 99999);

    // generate the title and content with random number
    string threadTitle = this.num.ToString();
    string threadContent = "111" + num.ToString();

    // generate the url
    string url =
        "API2 Address Here";
    url = url + "&title=" + threadTitle + "&content=" + threadContent;

    // use HttpClient to send the new thread
    HttpClient client = new HttpClient();
    string x = await client.GetStringAsync(url);
    client.Dispose();

    // display the thread informartion for further check
    this.titleView.Text = threadTitle;
    this.contentView.Text = threadContent;
}
1 ответ
4

Кажется

вы нажимаете один и тот же URL при каждом обновлении. Иногда Windows Phone хранит запрос и ответ в кеше.

Если возможно, вы добавляете еще один параметр в свой запрос и при каждом клике просто меняете значение этого параметра. Вы можете использовать GUID или Unix Timestamp.

Вы можете попробовать как:

 private async void RefreshJSONButton_Click(object sender, RoutedEventArgs e)
    {
        this.JsonView.Text = string.Empty;
        HttpClient client = new HttpClient();
    int unixTimestamp = (int)(DateTime.Now.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

    string url =
    "http://API1 Address Here/Your queries&temp=unixTimestamp";
    string x = await client.GetStringAsync(url);
    this.JsonView.Text = x;
    client.Dispose();
    }

Большое спасибо! Отлично работает! :)

от Albert Gao

Спасибо! Пожалуйста, удалите адрес API в строке URL, спасибо :)

от Albert Gao

@AlbertGao. Я удалил адрес API. Теперь он работает нормально?

от vasuy19

Похожие вопросы