asp.net – 为什么我在查看浏览器功能时会得到这些奇怪的结果?
我目前正在研究浏览器功能,并试图测试.NET 4.0附带的浏览器定义文件.为此,我使用Firefox的附加组件来更改用户代理,我有一个简单的页面报告以下内容:
Request.UserAgent Request.Browser.Id Request.Browser.Browser Request.Browser.MajorVersion Request.Browser.MinorVersion Request.Browser.Platform Request.Browser.IsMobileDevice Request.Browser.MobileDeviceManufacturer Request.Browser.MobileDeviceModel 通常,这会根据默认浏览器定义文件中的注释中提供的示例提供正确的信息.但是,我不时会看到奇怪的结果,我无法解释. 以iphone.browser定义文件中的示例iPhone用户代理为例,如下所示: Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML,like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 这应该将浏览器作为Safari返回.这取决于将Safari作为父级的IPhone网关,它与术语Safari匹配. 稍微更改用户代理以便在iPhone上模拟邮件客户端的用户代理意味着删除用户代理的末尾部分,like Gecko) 现在应该将Mozilla作为浏览器返回,因为它无法在术语Safari上匹配.但是,在第一次报告错误信息后立即对此进行分析,仍然表明浏览器是Safari. 使用App_Browsers文件夹添加自定义.browser文件,然后修改它似乎会强制它暂时正确,几乎就像缓存定义或规则并且不会在每个请求上完全运行. 这也是另一种方式,如果你从第二个示例用户代理开始,那么在分析第一个用户代理时,它将报告为Mozilla而不是Safari. 任何人都可以解释这种行为或解决方法吗?它是否尝试进行某种(不那么)聪明的缓存,它根据类似的用户代理进行假设? 谢谢. 解决方法
除了寻找字符串“Safari”之外,还有更多的匹配.如果你看一下Mono的ASP.Net实现使用的
user agent database,你会发现你的第一个更具体的用户代理字符串将匹配一个更具体的规则,并且将设置浏览器版本.但即使修剪后的用户代理字符串仍然符合规则,将其标识为“iPhone”的某种变体,后来将其呈现为“Safari”.
微软的ASP.Net最有可能使用一个非常相似的数据库,我只是用Mono作为例子,因为代码很容易在网上找到. 所以,我重新回答了我的答案,并意识到我完全误解了这个问题!你是对的:缓存就在这里. .NET Framework尝试节省解析用户代理字符串的时间.解析UA字符串后,结果将保存在哈希表中.关键是UA字符串,截断. 默认情况下,此密钥长度为64个字符,这就是为什么当您更改长UA字符串的末尾时,您没有观察到任何更改.此设置由HttpCapabilitiesDefaultProvider的属性UserAgentCacheKeyLength控制.为了验证,我补充道 <browserCaps userAgentCacheKeyLength="512" /> 到< system.web>我的测试项目中的Web.config中的元素.通过这个快速解决方案,问题就消失了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在ASP.NET MVC中,在使用正确的类型化对象呈
- 在不刷新ASP.NET网页上的整个页面的情况下刷新内容的最佳布
- entity-framework-4 – 通过扩展方法的IDbSet和公开包含方法
- asp.net-mvc-4 – MVC4和MVCContrib
- asp.net-core – TagHelper,用于将路由值作为链接的一部分传
- 如何在ASP.NET中以“YYYY-MM-DD”格式获取当前日期?
- ASP.NET变量范围
- asp.net-mvc-3 – ModelState.AddModelError不显示在我的视
- asp.net-mvc – 如何从ActionExecuting过滤器中获取路由值?
- asp.net – 无法从代码隐藏中调用App_Code类
- asp.net分页控件AspNetPager的样式美化
- asp.net-mvc-4 – 找不到布局页面
- 什么时候最好在ASP.NET中使用静态函数?
- asp.net-mvc – 使用web api和asp.net mvc 5进行
- asp.net – 从Classic ASP调用需要.NET类型的.NE
- asp.net-mvc – 从ASP .NET MVC 3 _Layout View访
- 如何使用WebMatrix在ASP.NET网页中创建自定义错误
- asp.net – 在DataTable.Select中使用BETWEEN
- .net – 将RouteValueDictionary转换为匿名对象的
- 在ASP.NET中为命中计数器实现存储的最佳方法是什