首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpContext.Request.Browser.Browser将边缘检测为Chrome

HttpContext.Request.Browser.Browser将边缘检测为Chrome
EN

Stack Overflow用户
提问于 2015-11-12 19:11:03
回答 3查看 5.1K关注 0票数 3

这真的很奇怪,我使用HttpContext.Request.Browser.Browser属性来检查请求来自哪个浏览器。

使用chrome时,该值为Chrome

使用firefox时,该值为Firefox

使用边时,该值为Chrome

这是HttpContext中的已知错误吗

检测IE\Edge用户最准确的方法是什么?我见过许多检查user_agent值的JS代码,但它随着IE版本的不同而不断变化,所以很难知道哪些代码更新了,哪些没有更新。

也许有人可以推荐一些很好的JS库来达到这个目的呢?

EN

回答 3

Stack Overflow用户

发布于 2016-12-22 19:16:14

这个方法对我来说效果很好。

代码语言:javascript
复制
if (Regex.IsMatch(HttpContext.Request.UserAgent, @"Edge\/\d+"))
 {
    wrkBrowser = "Edge"
  }

如果要检查多个浏览器,请注意检查的顺序,因为许多浏览器喜欢在其UserAgent字符串中提及其他浏览器。届时还要检查下面的条件

代码语言:javascript
复制
 Request.Browser.Browser == "Chrome" 
票数 3
EN

Stack Overflow用户

发布于 2020-11-04 20:51:20

我也面临着同样的问题,我找出了问题的根本原因,也解决了它。

解决方案是增加Web.config中的userAgentCacheKeyLength,如下所示:

代码语言:javascript
复制
<system.web>
    <browserCaps userAgentCacheKeyLength="256" />
</system.web>

默认情况下,userAgentCacheKeyLength的值为64。

实际情况是,IIS缓存的用户代理值达到了userAgentCacheKeyLength中定义的长度(默认情况下为64 )。因此,如果您使用Chrome命中第一个请求,IIS会将Chrome的用户代理值的前64个字符存储在缓存中。现在,如果下一次你点击来自Edge的请求,IIS将匹配前64个字符,这与Chrome类似,因此IIS将浏览器值返回为Chrome。

如果将该值增加到256,IIS将能够存储用户代理的全值,因此它将始终准确地区分Chrome和Edge浏览器。

票数 1
EN

Stack Overflow用户

发布于 2016-10-28 02:23:01

如果你不介意使用JS,你可以这样做:

代码语言:javascript
复制
function get_browser() {
            var ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident|edge(?=\/))\/?\s*(\d+)/i) || [];
            if (/trident/i.test(M[1])) {
                tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
                return { name: 'IE', version: (tem[1] || '') };
            }
            if (M[1] === 'Chrome') {
                tem = ua.match(/\bOPR\/(\d+)/);
                if (tem != null) { return { name: 'Opera', version: tem[1] }; }
                tem = ua.match(/\bEdge\/(\d+)/);
                if (tem != null) { return { name: 'Edge', version: tem[1] }; }
            }
            M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
            if ((tem = ua.match(/version\/(\d+)/i)) != null) { M.splice(1, 1, tem[1]); }
            return {
                name: M[0],
                version: M[1]
            };
        }

然后,您可以简单地调用它并将结果发送到后端。它对我来说就像是一种护身符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33670110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档