2019年3月2日 星期六

C# WebRequest的cache問題



今天在 RMT Processing 程式中發現一個很大的問題: 如果透過手機/平板/電腦當路由器(例如分享4G網路)時, 手機/平板/電腦可能有類似proxy的功能, 對下載的檔案產生cache, 在C#中如果使用 WebRequest 物件, 會受到這個影響而無法即時更新下載資料, 這問題在一般普通的網路設備 (Hub/Switch...) 並不會發生這個問題, 所以之前都沒有發現到有這個問題.

幸好這可以在程式中指定不要用cache跟系統指定的proxy, 只要在產生WebRequest物件後設定cache為
NoCacheNoStore, proxy設定為null即可:


WebRequest req = WebRequest.Create(imageUrl);
req.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore); req.Proxy = null;