You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

禁用HTTP(S)请求/响应缓存——如何在Xamarin iOS中关闭CachePolicy?

我来帮你搞定Xamarin.iOS里禁用HTTP请求缓存的问题,下面从代码实现和Info.plist配置两个方面给你详细说明:

1. C#(Xamarin.iOS)代码实现

根据不同的网络请求方式,有几种不同的实现方案:

方案一:针对单个请求设置缓存策略

如果只是想让某一个请求跳过缓存,直接从服务器拉取最新数据,可以在创建NSMutableUrlRequest时指定缓存策略:

// 初始化请求对象
var targetUrl = new NSUrl("https://your-target-api.com/path");
var mutableRequest = new NSMutableUrlRequest(targetUrl);

// 设置缓存策略为忽略本地所有缓存,强制请求服务器
mutableRequest.CachePolicy = NSUrlRequestCachePolicy.ReloadIgnoringLocalCacheData;

// 使用NSUrlSession发起请求
var session = NSUrlSession.SharedSession;
var dataTask = session.CreateDataTask(mutableRequest, (data, response, error) => {
    if (error == null && data != null)
    {
        // 在这里处理返回的数据
        var responseString = NSString.FromData(data, NSStringEncoding.UTF8);
        Console.WriteLine(responseString);
    }
});
dataTask.Resume();

方案二:全局配置所有请求的缓存策略

如果想让App内所有网络请求都禁用缓存,可以自定义NSUrlSessionConfiguration,把缓存策略全局设置为禁用:

// 创建自定义会话配置
var sessionConfig = NSUrlSessionConfiguration.DefaultSessionConfiguration;

// 禁用磁盘缓存
sessionConfig.DiskCachePolicy = NSUrlRequestCachePolicy.ReloadIgnoringLocalCacheData;
// 禁用内存缓存
sessionConfig.RequestCachePolicy = NSUrlRequestCachePolicy.ReloadIgnoringLocalCacheData;
// 可选:将缓存大小设为0,彻底清除缓存空间
sessionConfig.DiskCacheSize = 0;
sessionConfig.MemoryCacheSize = 0;

// 使用该配置创建全局会话
var globalSession = NSUrlSession.FromConfiguration(sessionConfig);

// 后续用这个会话发起的所有请求都会遵循禁用缓存的规则
var dataTask = globalSession.CreateDataTask(new NSUrl("https://your-target-api.com/path"), (data, response, error) => {
    // 处理响应逻辑
});
dataTask.Resume();

方案三:针对HttpClient的配置

如果你的项目使用HttpClient发起请求,可以通过自定义NSUrlHandler来注入缓存策略:

// 创建自定义Handler并设置缓存策略
var nsUrlHandler = new NSUrlHandler();
nsUrlHandler.Configuration.RequestCachePolicy = NSUrlRequestCachePolicy.ReloadIgnoringLocalCacheData;

// 初始化HttpClient时传入该Handler
var httpClient = new HttpClient(nsUrlHandler);

// 发起请求
var response = await httpClient.GetAsync("https://your-target-api.com/path");
var responseContent = await response.Content.ReadAsStringAsync();

2. Info.plist中的配置说明

很遗憾,没有直接在Info.plist中全局禁用HTTP缓存的配置项。虽然Info.plist里有NSAppTransportSecurity(ATS)相关配置,主要用于控制HTTPS请求的安全性,但这和缓存控制是完全独立的功能,无法通过ATS来禁用缓存。

如果需要针对特定域名或所有请求禁用缓存,还是必须通过代码层面的缓存策略设置来实现。

内容的提问来源于stack exchange,提问作者Panduranga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:24:24