首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果浏览器是ASP.NET核心中的Internet Explorer,则服务器端检测

如果浏览器是ASP.NET核心中的Internet Explorer,则服务器端检测
EN

Stack Overflow用户
提问于 2016-05-13 17:24:47
回答 3查看 16K关注 0票数 18

我正在尝试确定浏览器是否是服务器端的ASP.NET核心中的Internet Explorer。

在我的cshtml中以前的ASP.NET 4版本中:

代码语言:javascript
运行
复制
@if (Request.Browser.Browser == "IE")
{
    //show some content
}

但是在ASP.NET 5/ASP.NETCore intellisense for Context.Request中没有Browser选项

我可以得到UserAgent,但这似乎相当复杂,因为IE有许多类型的字符串

代码语言:javascript
运行
复制
Context.Request.Headers["User-Agent"]

对于Internet Explorer 11.0,我得到

代码语言:javascript
运行
复制
 Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko

这使得很难从它中确定任何过去、现在或将来的IE版本。

EN

回答 3

Stack Overflow用户

发布于 2016-05-13 20:27:48

我觉得有责任说,如果可以的话,最好尽量避免服务器端的浏览器嗅探。但我完全意识到,有时它可能是有帮助的。所以..。

根据这个列表http://www.useragentstring.com/pages/useragentstring.php?name=Internet+Explorer,它看起来像是几乎所有版本的it的UserAgent都包含MSIE,所以这将是你想要寻找的主要内容。

有趣的是,当查看此IE用户代理列表时,您观察到的用户代理是极少数不包含MSIE的用户代理之一。如果您检查用户代理中是否存在MSIE或Trident,这应该可以很好地识别Internet Explorer的所有情况。

(Trident是支持Internet Explorer的布局引擎,它仅用于Internet Explorer)

因此,例如,用于确定浏览器是否为IE的代码可以编写为:

代码语言:javascript
运行
复制
public static bool IsInternetExplorer(string userAgent) {
    if(userAgent.Contains("MSIE") || userAgent.Contains("Trident")) {
        return true;
    } else {
        return false;
    }
}

这可以从控制器内部调用,如下所示:

代码语言:javascript
运行
复制
string userAgent = Request.Headers["User-Agent"];

if(IsInternetExplorer(userAgent)) {
    //Do your special IE stuff here

} else {
    //Do your non IE stuff here
}
票数 33
EN

Stack Overflow用户

发布于 2019-11-19 01:12:56

在ASP.NET核心页和ASP.NET Core Blazor中,您可以使用以下内容:

Startup.cs

代码语言:javascript
运行
复制
public void ConfigureServices(IServiceCollection services)
{
     services.AddHttpContextAccessor();
     // ...
}

SomeComponent.razor

代码语言:javascript
运行
复制
@inject IHttpContextAccessor HttpContextAccessor

@if (HttpContextAccessor.HttpContext != null 
  && HttpContextAccessor.HttpContext.Request.IsInternetExplorer())
{
    <input type="text" @bind="ViewModel.TextInput" />
}
else
{
    <input type="date" @bind="ViewModel.DateTimeInput" />
}

HttpRequestExtensions.cs

代码语言:javascript
运行
复制
public static class HttpRequestExtensions
{
    public static bool IsInternetExplorer(this HttpRequest request)
    {
        return IsInternetExplorer(request.Headers["User-Agent"]);
    }

    private static bool IsInternetExplorer(string userAgent)
    {
        return userAgent.Contains("MSIE")
               || userAgent.Contains("Trident");
    }
}
票数 7
EN

Stack Overflow用户

发布于 2018-02-23 04:08:02

我使用了一个扩展方法来评估这一点:

代码语言:javascript
运行
复制
public static bool IsInternetExplorer(string userAgent)
{
    return (userAgent.Contains("MSIE") || userAgent.Contains("Trident"));
}

// Extension for Request
public static bool IsInternetExplorer(this HttpRequestBase req)
{
    return IsInternetExplorer(req.Headers["User-Agent"]);
}

用法:

代码语言:javascript
运行
复制
if (Request.IsInternetExplorer())
{
    // Do something microsofty          
}

(基于Ron C的回答)

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

https://stackoverflow.com/questions/37206185

复制
相关文章

相似问题

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