如何清除缓存的用户代理

时间:2016-10-17 21:07:27

标签: ios asp.net ipad caching user-agent

我的原始问题是我的网站仅在某些iPhone和iPad设备上发布回发错误。该网站适用于所有台式计算机以及大多数其他手机。错误是特定于设备的,而不是特定于浏览器。我在以下讨论中找到了答案 -

.Net 4.0 website cannot identify some AppleWebKit based browsers

ASP.NET Ajax postback suddenly stops on IPhone/IPad

这些讨论的要点是 -

" .NET框架缓存用户代理密钥。 用户代理缓存的默认大小为64个字符。这意味着,.NET将UserAgent字符串的前64个字符缓存为键。因此,下次UA以相同的64个字符开头的用户访问该站点时,它将映射到内存中先前存储的密钥。现在,该网站对此新用户代理的行为方式相同。

在大多数情况下,这不是一个问题,但偶尔会弹出一个看起来像Safari的用户代理,但实际上并没有正确解决(Mozilla 0.0没有任何功能),但是映射仍然存储在缓存中,这意味着所有具有相同64字符前缀的UserAgent字符串(恰好与那么多正常的Safaris完全相同)现在也被错误地映射,直到缓存条目到期为止。 #34;

添加用户代理长度为256的browserCaps解决了某些设备的问题,但没有解决使用chrome以及ipad / iphone上的safari的问题。

有没有办法清除这些缓存的用户代理?清除两个浏览器上的浏览器缓存似乎都无法正常工作。

1 个答案:

答案 0 :(得分:0)

在网上挖掘后,我发现了一种清除缓存的方法 -

来源:https://msdn.microsoft.com/en-us/library/ms228122(v=vs.85).aspx

对位于App_Browsers目录中的.browser文件的更改使缓存无效,下一个请求将导致应用程序重新编译。

但是,如果对.browser文件进行了更改 %SystemRoot%\ Microsoft.NET \ Framework \ version \ CONFIG \ Browsers目录, 您必须使用%SystemRoot%\ Microsoft.NET \ Framework \ version \ aspnet_regbrowsers.exe工具手动重新编译应用程序, 或者您必须使用BrowserCapabilitiesCodeGenerator类以编程方式重新编译它。

它没有指定您应该做哪些更改,但我假设任何外部更改都会强制它重新编译。我还没有对此进行测试,只是想把它放在这里,万一有人试过这个。