2014-10-29 48 views
3

我有ASP.NET MVC 4应用程序,并且在服务器端检测浏览器时遇到了问题。 Opera客户端用户代理 "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” 文件并添加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:

我添加了一个文件 “opera.browser” 文件夹 “App_Browsers文件”:

<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定义为“Opera”,但随后我发送了来自Chrome userAgent的第二个请求,并将browserName仍定义为“Opera”。我究竟做错了什么?

+0

尝试看看这个,可帮助您 http://stackoverflow.com/questions/13836636/detect-internet-explorer-browser-version-problems – HaveNoDisplayName 2014-10-29 18:23:48

+0

尝试这一个 - https://开头browserdetection。 codeplex.com/ – 2014-12-30 06:43:27

回答

0

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

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