2017-08-10 48 views
0

我處於我的第一個Xamarin.Forms應用程序的測試階段,該應用程序嚴重依賴於HttpClient從遠程站點檢索JSON數據。我發現一旦發出請求,響應似乎被緩存,並且更新的數據永遠不會被檢索。我正在初始化HttpClient,如下所示:Xamarin Forms應用程序,HttpClient似乎緩存響應FOREVER

new HttpClient() 
{ 
    Timeout = new TimeSpan(0, 0, 1, 0), 
    DefaultRequestHeaders = 
    { 
    CacheControl = CacheControlHeaderValue.Parse("no-cache, no-store, must-revalidate"), 
    Pragma = { NameValueHeaderValue.Parse("no-cache")} 
    } 
} 

這些請求標頭似乎沒有任何幫助。如果我將其中一個URL放入瀏覽器中,則會獲得更新數據的JSON響應。服務器端也設置了no-cache頭。

任何想法如何我可以每次都強制一個新的請求? TIA。這個測試是在Android模擬器中完成的,順便說一句。我不知道iOS版本是否具有類似的行爲。

+0

您使用的是AndroidHttpHandler嗎? – Cheesebaron

回答

1

我建議你使用modernhttpclient nuget package,並實現你的Android的代碼,如:

var httpClient = new HttpClient(new NativeMessageHandler()); 

此代碼工作在兩個Android,iOS和/或代碼的PCL。基本上這個nuget軟件包確保您使用最新的平臺優化爲HttpClient。對於Android,這是OkHttp -package,對於iOS,這是NSURLSession

這可以幫助您防止提供的HttpClient類的任何怪癖,並使用您運行的平臺提供的優化。

像你所展示的問題不應該再發生。

+1

我不喜歡你推薦modernhttpclient。它不適用於HTTP/2或SPDY。它在與TLS 1.2站點交談時也會嘔吐。 – Cheesebaron

+0

我明白了。 Xamarin大學的教練稱這是我培訓期間的最佳做法之一,所以我只能假設他們是正確的。我對您所描述的內容沒有經驗,但是我們的生產中確實有一些相當複雜的Xamarin應用程序,它們具有相當複雜(但標準)的Azure Web App後端。沒有任何問題。 –

+0

我有和@Cheesebaron一樣的經歷。這一切都運行良好,直到某些版本的Mono開始在Modern中引發問題。如果連接失敗,應用程序將隨機崩潰,然後在連接恢復後重試查詢。 https://github.com/paulcbetts/ModernHttpClient/issues/229刪除現代完全固定。目前爲了解決「緩存」問題,我只是添加隨機生成的guid的'?cachebuster = '。這對於查找日誌文件中的特定請求非常適用:-) –