服务器端的浏览器检测错误

时间:2014-10-29 07:16:46

标签: c# asp.net .net asp.net-mvc asp.net-mvc-4

我有ASP.NET MVC 4应用程序,我在服务器端检测浏览器时遇到问题。 Opera userAgent的客户端 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36 OPR/25.0.1614.63"发送请求,但服务器端的浏览器名称定义为" Chrome"这是错的。

var browserName = Request.Browser.Browser;

我希望browserName定义为" Opera"。 我试图覆盖对象Request.Browser的创建。


解决方案1:

我已经创建了" browserCaps.config"文件并将Opera的xml元素添加到此文件中。

<browserCaps>
  <use var="HTTP_USER_AGENT" />
      ...
      <case match="Chrome/\d+\.\d+\.\d+.\d+\sSafari/\d+\.\d+\sOPR/(?'version'(?'major'\d+)(?'minor'\.\d+)\.\d+.\d+)">
        browser=Opera
        version=${version}
        majorversion=${major}
        minorversion=${minor}
      </case>
      ...
</browserCaps>

它工作正常,但我不喜欢这个解决方案,因为它会覆盖所有浏览器的功能,我需要手动更新。


解决方案2:

我添加了一个文件&#34; opera.browser&#34;到文件夹&#34; App_Browsers&#34;:

<browsers>
   <browser id="Opera" parentID="Chrome">
      <identification>
         <userAgent match="OPR/(?'version'(?'major'\d+)(\.(?'minor'\d+)?)\w*)" />
      </identification>

      <capabilities>
         <capability name="browser" value="Opera" />
         <capability name="majorversion" value="${major}" />
         <capability name="minorversion" value="${minor}" />
         <capability name="type" value="Opera${major}" />
         <capability name="version" value="${version}" />
      </capabilities>
   </browser>
</browsers>

我发送了Opera userAgent的第一个请求,它已经完成,browserName定义为&#34; Opera&#34;,但后来我发送了来自Chrome userAgent的第二个请求,而browserName仍然定义为& #34;歌剧&#34 ;.我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果您只需要识别浏览器的功能,那么如果应用程序将Opera浏览器识别为Chrome浏览器,则不会出错。

去年,Opera已经完全用WebKit切换了他们的渲染引擎,所以在将内容提供给Chrome或Opera或任何其他基于WebKit的浏览器时,它确实没有任何差别。