0

奇妙な問題があります。そのため、アプリでデータを返す Web サービスに対していくつかの呼び出しを行っています。ただし、私はトークンベースのログインシステムを使用しているため、ユーザーが初めてアプリに入ると、Web サービスからトークンを取得してその特定のユーザーにログインし、そのトークンはそのユーザーの詳細のみを返します。

私が抱えている問題は、新しいユーザーの詳細を取得するために再度呼び出しを行う必要があるユーザーの変更時ですが、ビジュアルスタジオのブレークポイントデバッグを使用すると、新しいユーザーのトークンが呼び出しを行っていることが示されますが、問題はjsonが取得されている場合です逆シリアル化されていても、古いデータを読み取って逆シリアル化しているようです。新しいユーザーでアプリを終了すると、正常に動作するため、キャッシュされた値を読み取っているように見えますが、クリアする方法がわかりませんか? 新しい呼び出しが行われており、問題は逆シリアル化にあると確信していますが、再度逆シリアル化する前に値をクリアしようとしましたが、何も機能しません。json デシリアライザーで何か不足していますか?キャッシュされた値をクリアするにはどうすればよいですか?

ここで呼び出しを行い、キャッシュしないように設定して、毎回新しい呼び出しを行います。

  client.Headers[HttpRequestHeader.CacheControl] = "no-cache";
  var token_details = await client.DownloadStringTaskAsync(uri);

ここで結果を逆シリアル化します。このセクションで古いデータが表示されるため、「token_details」内に表示される生のjsonは正しいですが、token_detailsを逆シリアル化すると、間違ったデータが表示されます。

deserialized = JsonConvert.DeserializeObject(token_details);

私が逆シリアル化しているクラスは単純なクラスであり、ここでは特別なことは何も起きていません。呼び出されるたびに値をクリアするようにコンストラクターを作成しようとさえしました。

 public class test
{
    public string status { get; set; }
    public string name{ get; set; }
    public string birthday{ get; set; }
    public string errorDes{ get; set; }


    public test()
    {
        status = "";
        name= "";
        birthday= "";
        errorDes= "";
      }
}

呼び出しを行う前の uri:

{ https://whatever.co.za/token/?code=BEBCg==&id=WP7&junk=121edcd5-ad4d-4185-bef0-22a4d27f2d0c } - 古い呼び出し

"UBCg==" - 古い返信

{ https://whatever.co.za/token/?code=ABCg==&id=WP7&junk=56cc2285-a5b8-401e-be21-fec8259de6dd } - 新しい呼び出し

"UBCg==" - 古い呼び出しと同じ応答である新しい応答

ご覧のとおり、呼び出しを行うたびに新しい GUID をアタッチしましたが、downloadstringtaskasync メソッド呼び出しを行う前に新しい uri が読み取られますが、古いデータが返されます。

  • "&junk=" + Guid.NewGuid());
4

0 に答える 0