Angular 5执行增改操作后.subscribe()未调用Web API问题
解决IE11下Angular 5获取列表时Web API未触发的问题
嘿,这个问题我之前在IE11环境里踩过一模一样的坑!大概率是IE11的GET请求默认缓存机制搞的鬼——你从新建页面返回列表页后,浏览器直接复用了之前缓存的列表数据,根本没发请求到Web API。
下面给你两种靠谱的解决思路:
前端Angular侧处理
给你的GET请求加个随机参数(比如时间戳),让每次请求的URL都不一样,绕过IE的缓存:
// 示例:获取列表的方法 getItemList() { // 加个时间戳参数,确保每次请求URL唯一 const cacheBuster = `?t=${new Date().getTime()}`; return this.http.get(`/api/your-endpoint${cacheBuster}`) .subscribe(data => { // 处理列表数据 this.itemList = data; }); }
如果项目里有很多GET请求,也可以写个HTTP拦截器,自动给所有GET请求加上这个缓存破击参数,不用挨个修改请求代码。
后端Web API侧处理
在ASP.NET Core里直接给响应头设置禁用缓存,从根源上阻止IE缓存:
全局配置(所有API接口生效)
在Startup.cs的ConfigureServices方法里添加:
services.AddMvc(options => { // 添加禁用缓存的过滤器 options.Filters.Add(new ResponseCacheAttribute() { NoStore = true, Location = ResponseCacheLocation.None }); });
单个接口配置
如果只想针对列表接口禁用缓存,在对应的控制器方法上加特性:
[HttpGet] [ResponseCache(NoStore = true, Location = ResponseCacheLocation.None)] public IActionResult GetItemList() { // 接口逻辑 return Ok(_itemService.GetAll()); }
验证方法
打开IE11的开发者工具(按F12),切换到「网络」标签,刷新页面看列表请求的状态:如果之前是from cache或者304 Not Modified,改完之后应该会变成200 OK,说明请求真的发到Web API了。
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

