我最初的问题是我的网站只在一些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,但实际上不是,并且没有正确解析(Mozilla0.0没有任何功能),但映射仍然存储在缓存中,这意味着所有具有相同64个字符前缀的UserAgent字符串(恰好与许多普通Safari的前缀完全相同)现在也会被错误映射,直到缓存条目过期。“
添加用户代理长度为256的browserCaps解决了一些设备的这个问题,但对于那些在ipad/iphone上使用chrome和safari的设备却没有。
有没有办法清除这些缓存的用户代理?在两个浏览器上清除浏览器缓存似乎都不起作用。
发布于 2016-10-18 23:13:00
在网上做了一些调查之后,我找到了一种清除这个缓存的方法-
来源:https://msdn.microsoft.com/en-us/library/ms228122(v=vs.85).aspx
对位于App_Browsers目录中的.browser文件的更改将使缓存无效,下一个请求将导致应用程序重新编译。
但是,如果对%SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers目录中的.browser文件进行了更改,则必须使用%SystemRoot%\Microsoft.NET\Framework\version\aspnet_regbrowsers.exe工具手动重新编译应用程序,或者必须使用BrowserCapabilitiesCodeGenerator类以编程方式重新编译应用程序。
它没有指定您应该做什么更改,但我假设任何外部更改都会强制它重新编译。我还没有测试它,只是想把它放在这里,以防有人尝试过。
https://stackoverflow.com/questions/40095671
复制相似问题