.NET Request.Browser错误地识别Opera版本

时间:2013-02-21 16:30:22

标签: .net asp.net-mvc browser opera

.Net MVC 3中的以下代码返回“Opera 9”时应该返回“Opera 12”,或“Opera 11”在多台机器上确认了这一点,Win 7 64位和XP 32位。

public ActionResult TestBrowser()
{
    return Content(Request.Browser.Browser + " " + Request.Browser.MajorVersion);
}

出于某种原因,Opera的浏览器标签中有9.8,实际的版本号在最后 Opera Help...About

Opera的格式化浏览器标记是错误的,还是 HttpBrowserCapabilitiesBase 类错误解析错误?

3 个答案:

答案 0 :(得分:1)

我发现这解释了Opera的用户代理字符串,以及为什么Opera / 9.80现在在用户代理字符串中被硬编码。

http://my.opera.com/community/openweb/idopera/

就像我在评论中所说的那样,看看功能检测可能会更好,因为很快就会出现与IE 10相同的问题。

编辑:一种解决方案可能是自己解析用户代理字符串。

编辑2:如果您想使用浏览器检测,可以使用Modernizr Javascript库(http://modernizr.com/)来完成这项工作。

答案 1 :(得分:1)

根据我的经验,正确的版本控制(假设它不是一个欺骗性的用户代理字符串)始终是最后一个斜杠后显示的版本。因此,删除前面的所有内容,包括最后一个斜杠,其余部分将是您当前的版本。

答案 2 :(得分:1)

@Sashenka:正如你所指出的那样,需要Opera字符串的硬部分。如果出于类似的原因,其他浏览器不需要类似的想法,我不会感到惊讶。然而,特征检测只是另一种蠕虫等待你在后面跟踪你。例如,IE的每个版本都会改​​变它们处理事物的方式;也就是说,你根本不能相信M $。解析用户代理字符串并不是那么困难,几乎可以保证成功。所有这一切,我想知道是否更容易编写标准代码,包括所需的IE绷带,让每个浏览器按照设计师的意图呈现页面;好,坏或无动于衷! : - )