检查浏览器是否为chrome或edge

我目前的网站仅在Chrome浏览器中运行,为此,我已按以下方式检查

if (Request.Browser.Browser == "Chrome") { // Allow } 

但对于Edge来说 ,它仅仅作为"Chrome"返回。

如何仅允许从Chrome浏览器进行访问?

您可以检查用户代理并查看它是否是Microsoft Edge,因为Microsoft Edge在其用户代理字符串中包含Edge/version

 //get user agent somehow here based on what you are working on userAgent = Request.UserAgent; if (userAgent.IndexOf("Edge") > -1) { // maybe client's browser is Microsoft Edge } 

Edge用户代理字符串的示例

Mozilla/5.0 (X11; CrOS x86_64 6783.1.0) AppleWebKit/537.36 (KHTML, like Gecko) Edge/12.0

在这里和这里看到更多

最后,我建议在浏览器上使用function检测,而不是基于用户代理。

我很好奇 – 用例是什么? 无论如何,你走了:

Microsoft Edge UA字符串:

Mozilla / 5.0(Windows NT 10.0)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 42.0.2311.135 Safari / 537.36 Edge / 12.10136

我在这篇博文中详述了原因。

Neowin最近报道称微软新推出的Windows 10浏览器Spartan使用Chrome UA字符串“Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 39.0.2171.71 Safari / 537.36 Edge / 12.0 “。 这是故意的。

您还会注意到整个字符串以“Edge / 12.0”结尾,而Chrome则没有。

我应该指出,这与微软对IE 11的做法不同,后者在Windows 8上读取:Mozilla / 5.0(Windows NT 6.3; Trident / 7.0; rv:11.0),如Gecko,如此解释post。

什么是用户代理嗅探?

通常,Web开发人员会UA嗅探浏览器检测。 Mozilla在他们的博客上解释得很好:

向不同的浏览器提供不同的网页或服务通常是一个坏主意。 无论用户使用哪种浏览器或设备,Web都可供所有人访问。 有一些方法可以开发您的网站,以便根据function的可用性逐步增强自身,而不是针对特定的浏览器。

这是一篇很好的文章,解释了用户代理的历史。

通常,懒惰的开发人员只会嗅探UA字符串并根据他们认为观看者正在使用的浏览器禁用其网站上的内容。 Internet Explorer 8是开发人员常见的挫折点,因此他们会经常检查用户是否使用任何版本的IE,并禁用function。

Edge团队在他们的博客上详细介绍了这一点。

所有用户代理字符串都包含有关其他浏览器的信息,而不是您使用的实际浏览器 – 不仅包括令牌,还包括“有意义”的版本号。

Internet Explorer 11的UA字符串:

Mozilla / 5.0(Windows NT 6.3; Trident / 7.0; rv:11.0)就像Gecko一样

Microsoft Edge UA字符串:

Mozilla / 5.0(Windows NT 10.0)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 42.0.2311.135 Safari / 537.36 Edge / 12.10136

userAgent属性被Patrick H. Lauke在W3C讨论中恰当地描述为“一堆不断增长的谎言”。 (“或者更确切地说,添加足够的遗留关键字的平衡行为不会立即使旧的UA嗅探代码崩溃,同时仍然试图传达一些实际有用和准确的信息。”)

我们建议Web开发人员尽可能避免UA嗅探; 现代网络平台function几乎都可以通过简单的方式检测到。 在过去的一年中,我们已经看到一些UA嗅探网站已被更新以检测Microsoft Edge …仅为其提供传统的IE11代码路径。 这不是最好的方法,因为Microsoft Edge匹配’WebKit’行为,而不是IE11行为(任何Edge-WebKit差异都是我们有兴趣修复的错误)。

根据我们的经验,Microsoft Edge在这些站点中的“WebKit”代码路径上运行得最好。 此外,随着互联网在更广泛的设备上可用,请假设未知的浏览器是好的 – 请不要限制您的网站只在一小部分当前已知的浏览器上工作。 如果你这样做,你的网站将来几乎肯定会破产。

结论

通过展示Chrome UA字符串,我们可以解决这些开发人员正在使用的黑客攻击,为用户提供最佳体验。

 if(HttpContext.Current.Request.UserAgent.Contains("Edge")) { // Allow } 

为我工作。

我在记录JavaScript错误时使用浏览器检测,因为知道错误发生在哪个浏览器中很有用。

最初从这个问题我在App_Browsers文件夹中使用了一个条目:

            

但这是不一致的,有时仍然报告Chrome,所以现在我另外使用这个包装类:

 using System.Web; public class BrowserInfo { public BrowserInfo(HttpRequestBase request) { if (request.Browser != null) { if (request.UserAgent.Contains("Edge") && request.Browser.Browser != "Edge") { Name = "Edge"; } else { Name = request.Browser.Browser; Version = request.Browser.MajorVersion.ToString(); } Browser = request.Browser; Platform = request.Browser.Platform; IsMobileDevice = request.Browser.IsMobileDevice; if (IsMobileDevice) { Name = request.Browser.Browser; Name = request.Browser.Browser; } } } public HttpBrowserCapabilitiesBase Browser { get; } public string Name { get; } public string Version { get; } public string Platform { get; } public bool IsMobileDevice { get; } public string MobileBrand { get; } public string MobileModel { get; } }