0

Это действительно странно, я использую свойство HttpContext.Request.Browser.Browser, чтобы проверить, из какого браузера зашел запрос.HttpContext.Request.Browser.Browser обнаруживает Edge как Chrome

При использовании хрома, значение Chrome

При использовании Firefox, значение Firefox

При использовании Грань, значение Chrome

Это известная ошибка в HttpContext?

Что является самым точным способом обнаружения пользователей IE \ Edge? Я видел много JS-кодов, которые проверяют значение user_agent, но он продолжает меняться с каждой версией IE, поэтому очень сложно узнать, какой код обновлен, а какой нет.

Возможно, есть какая-то хорошая библиотека JS для этой цели, которую кто-то может порекомендовать?

+0

Посмотрите на 'Edge' ключевого слова в пользовательском агенте он существует только в пограничных браузерах, а не в старых браузерах Trident – Sagi

+2

Это выглядит как' Edge' возвращает следующий User- Агент ** 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, например, Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136' **, который признан как Chrome, поэтому да, это ошибка. Вы можете просто проверить, содержит ли строка пользовательского агента 'Edge'. Однако зачем вам это нужно? –

+0

@ Йельдар Курмангалиев, мне нужно заблокировать пользователей IE \ Edge на моем сайте. Я использовал «HttpContext» до сих пор, я знаю, что это не лучшая идея, чтобы проверить это на стороне сервера, но я подумал, что это может быть более точной, что сейчас я вижу не правильно. – LiranBo

ответ

0

Если вы не возражаете против использования JS вы можете сделать что-то вроде этого:

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] 
      }; 
     } 

, а затем вы можете просто позвонить и отправить результат на заднем конце. Это работало как прелесть для меня.

1

Этот метод работал отлично для меня

if (Regex.IsMatch(HttpContext.Request.UserAgent, @"Edge\/\d+")) 
{ 
    wrkBrowser = "Edge" 
    } 

Если вы проверяете для нескольких браузеров быть осторожными в порядке проверки, как многие браузеры любят упоминать другие браузеры в их UserAgent строки. В то время Проверяй ниже условия также

Request.Browser.Browser == "Chrome" 
Смежные вопросы