Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查浏览器是chrome还是edge_C#_.net_Google Chrome_Microsoft Edge - Fatal编程技术网

C# 检查浏览器是chrome还是edge

C# 检查浏览器是chrome还是edge,c#,.net,google-chrome,microsoft-edge,C#,.net,Google Chrome,Microsoft Edge,我目前的网站只在Chrome浏览器中运行,为此,我按以下方式进行了检查 if (Request.Browser.Browser == "Chrome") { // Allow } 但它也只是以“Chrome”的形式返回 如何仅允许从Chrome浏览器进行访问?您可以检查用户代理,查看它是否为Microsoft Edge,因为Microsoft Edge的用户代理字符串中包含Edge/version //get user agent somehow here based on what y

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

if (Request.Browser.Browser == "Chrome")
{
   // Allow
}
但它也只是以“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
}
边缘用户代理字符串示例

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

看到更多和

最后,我建议在浏览器上使用功能检测,而不是基于用户代理进行操作。

我很好奇——用例是什么?不管怎样,给你:

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没有

我要指出的是,这与微软在IE11上所做的并不是完全不同,IE11在Windows8上的内容是:Mozilla/5.0(WindowsNT6.3;Trident/7.0;rv:11.0),就像Gecko一样,正如本文所解释的

什么是用户代理嗅探?

通常,web开发人员会嗅探浏览器检测。Mozilla在他们的博客上对此做了很好的解释:

为不同的浏览器提供不同的网页或服务通常不是一个好主意。网站的目的是让每个人都可以访问,而不管他们使用的是哪种浏览器或设备。有一些方法可以开发网站,根据功能的可用性而不是针对特定的浏览器来逐步增强自身

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

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

Internet Explorer 11的UA字符串:

Mozilla/5.0(WindowsNT6.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

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

我们建议web开发人员尽可能避免UA嗅探;现代web平台功能几乎都可以通过简单的方式检测到。在过去的一年中,我们看到一些UA嗅探网站已经更新以检测Microsoft Edge…只是为其提供了一个遗留的IE11代码路径。这不是最好的方法,因为Microsoft Edge匹配“WebKit”行为,而不是IE11行为(任何边缘WebKit差异都是我们感兴趣修复的bug)

根据我们的经验,Microsoft Edge在这些站点的“WebKit”代码路径上运行得最好。此外,随着internet在更多种类的设备上可用,请假设未知浏览器是好的–请不要将您的站点限制为仅在一小部分当前已知的浏览器上运行。如果您这样做,您的站点几乎肯定会在未来收割

结论

通过展示Chrome UA字符串,我们可以绕过这些开发者使用的黑客,为用户提供最佳体验

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

为我工作。

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

最初,我使用了App_Browsers文件夹中的一个条目:

<browser id="Edge" parentID="Chrome">
  <identification>
    <userAgent match="Edge/(?'version'(?'major'\d+)(?'minor'\.\d+))" />
  </identification>
  <capabilities>
    <capability name="browser" value="Edge" />
    <capability name="version" value="${version}" />
    <capability name="majorversion" value="${major}" />
    <capability name="minorversion" value="${minor}" />
  </capabilities>
</browser>

使用功能检测而不是用户代理嗅探如何?顺便说一句,“此网站仅在X浏览器中工作”用户永远不会喜欢它。@AlexanderO'Mara它的beta版到目前为止,我们正在开发它,以使所有浏览器都可以使用。但目前我们想限制它访问其他浏览器。更好的问题是“你在使用什么在Microsoft Edge中不起作用?”我们应该解决这个问题,而不是嗅探和破坏用户的网站。小心,黑名单/白名单用户代理是如何做到的。是的,这根本不是一个好主意。功能检测是这里最有名的方法。@AlexanderO'Mara@AlexanderO“即使是Mara功能检测也不总是100%。为什么Microsoft Edge在阅读Request.Browser.Browser?…为什么
Mozilla
AppleWebKit
会出现在它的用户代理字符串中?一个用例…向用户报告他们在上周登录时使用的是Chrome还是Edge。(与功能检测无关…只是告诉用户他们需要知道什么。)
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; }
}