如何在 Asp.net Core 中获取用户浏览器名称(用户代理)?

     2023-03-17     60

关键词:

【中文标题】如何在 Asp.net Core 中获取用户浏览器名称(用户代理)?【英文标题】:How to get user Browser name ( user-agent ) in Asp.net Core? 【发布时间】:2015-04-24 05:52:15 【问题描述】:

能否告诉我如何获取客户端在 MVC 6、ASP.NET 5 中使用的浏览器名称?

【问题讨论】:

【参考方案1】:

我认为这很容易。在Request.Headers["User-Agent"].ToString()得到答案

【讨论】:

这会将所有浏览器名称返回给我 @kobosh Request.Headers["User-Agent"].ToString() 请注意,如果请求没有用户代理,则会导致 KeyNotFoundException!一定要先用.ContainsKey检查! 从头开始。由于某种原因,它只是返回“”。万岁的一致性...... 有些人可能更喜欢Request.Headers[HeaderNames.UserAgent] 避免使用字符串文字(可能在Core 1.0 中不起作用,不确定)【参考方案2】:

对我来说 Request.Headers["User-Agent"].ToString() 没有帮助导致返回所有浏览器名称,因此找到了以下解决方案。

已安装ua-parse。

在控制器using UAParser;

var userAgent = HttpContext.Request.Headers["User-Agent"];
var uaParser = Parser.GetDefault();
ClientInfo c = uaParser.Parse(userAgent);

使用上述代码后,可以使用c.UA.Family + " " + c.UA.Major +"." + c.UA.Minor 从 userAgent 获取浏览器详细信息 您还可以获取操作系统详细信息,例如c.OS.Family;

其中c.UA.Major 是浏览器主要版本,c.UA.Minor 是浏览器次要版本。

【讨论】:

这不是所有浏览器名称的列表,这是浏览器设置为用户代理的内容。 UAParser 知道如何获取所有这些名称并确定它的实际浏览器和操作系统。【参考方案3】:
userAgent = Request.Headers["User-Agent"]; 

https://code.msdn.microsoft.com/How-to-get-OS-and-browser-c007dbf7(链接失效) 去 4.8

https://docs.microsoft.com/en-us/dotnet/api/system.web.httprequest.useragent?view=netframework-4.8

【讨论】:

该链接是最佳答案。 User-Agent 字符串是您必须破译和解析以获取版本信息的字符串。那里提供的课程完成了所有艰苦的工作。 此答案适用于 .NET Framework,而不是 .NET Core【参考方案4】:

我开发了一个库来扩展 ASP.NET Core 以支持Wangkanai.Detection 的 Web 客户端浏览器信息检测,这应该可以让您识别浏览器名称。

namespace Wangkanai.Detection

    /// <summary>
    /// Provides the APIs for query client access device.
    /// </summary>
    public class DetectionService : IDetectionService
    
        public HttpContext Context  get; 
        public IUserAgent UserAgent  get; 

        public DetectionService(IServiceProvider services)
        
            if (services == null) throw new ArgumentNullException(nameof(services));

            this.Context = services.GetRequiredService<IHttpContextAccessor>().HttpContext;
            this.UserAgent = CreateUserAgent(this.Context);
        

        private IUserAgent CreateUserAgent(HttpContext context)
        
            if (context == null) throw new ArgumentNullException(nameof(Context)); 

            return new UserAgent(Context.Request.Headers["User-Agent"].FirstOrDefault());
        
    

【讨论】:

这是如何工作的?我看到你有一个DeviceResolver.cs 来确定它是移动设备、桌面还是桌面设备,但我看不到类似的代码来提取用户代理标头的详细信息。 我已经更新了repo,readme越来越成熟了。 github.com/wangkanai/Detection @SarinNaWangkanai 谢谢你的库!太棒了:)【参考方案5】:

安装这个.nuget package

创建一个这样的类:

public static class YauaaSingleton
    
        private static UserAgentAnalyzer.UserAgentAnalyzerBuilder Builder  get; 

        private static UserAgentAnalyzer analyzer = null;

        public static UserAgentAnalyzer Analyzer
        
            get
            
                if (analyzer == null)
                
                    analyzer = Builder.Build();
                
                return analyzer;
            
        

        static YauaaSingleton()
        
            Builder = UserAgentAnalyzer.NewBuilder();
            Builder.DropTests();
            Builder.DelayInitialization();
            Builder.WithCache(100);
            Builder.HideMatcherLoadStats();
            Builder.WithAllFields();
        


    

在您的控制器中,您可以从 http 标头读取用户代理:

string userAgent = Request.Headers?.FirstOrDefault(s => s.Key.ToLower() == "user-agent").Value;

然后就可以解析用户代理了:

 var ua = YauaaSingleton.Analyzer.Parse(userAgent );

 var browserName = ua.Get(UserAgent.AGENT_NAME).GetValue();

你也可以得到置信度(越高越好):

 var confidence = ua.Get(UserAgent.AGENT_NAME).GetConfidence();

【讨论】:

ASP.Net Core 如何在 EF Core 和 Identity 中获取用户角色

】ASP.NetCore如何在EFCore和Identity中获取用户角色【英文标题】:ASP.NetCorehowtogettheuserroleinEFCoreandIdentity【发布时间】:2018-01-0814:25:00【问题描述】:您好,我正在使用Identity和自定义用户类和EFCore构建API。我想获取属于用户的角色... 查看详情

如何在 Asp.net core mvc 的控制器中获取自己的用户

】如何在Asp.netcoremvc的控制器中获取自己的用户【英文标题】:HowcanIgetmyownUserincontrollerinAsp.netcoremvc【发布时间】:2019-05-1708:11:56【问题描述】:我有用户类:publicclassUser:EntitypublicvoidAcceptMenu(Menumenu)//AcceptMenupublicstringLoginget;set;pub... 查看详情

如何在 ASP.NET Core 5 MVC (.NET 5) 中获取记录的用户数据?

】如何在ASP.NETCore5MVC(.NET5)中获取记录的用户数据?【英文标题】:HowtogetloggeduserdatainASP.NETCore5MVC(.NET5)?【发布时间】:2021-05-3007:21:48【问题描述】:我目前正在开发一个ASP.NETCore5MVCWeb项目,我使用默认创建的单用户帐户生成模板... 查看详情

如何在 ASP NET CORE 3.0 中获取当前登录的用户 ID?

】如何在ASPNETCORE3.0中获取当前登录的用户ID?【英文标题】:HowtogetcurrentloggedinuseridinASPNETCORE3.0?【发布时间】:2021-09-2310:45:16【问题描述】:我是一名学生,我正在努力学习如何在ASPNET中使用身份和关系,如果你能帮助我在哪里... 查看详情

登录 ASP.NET Core 3.1 后如何获取用户信息

】登录ASP.NETCore3.1后如何获取用户信息【英文标题】:HowtogetUserInformationafterlogininASP.NETCore3.1【发布时间】:2021-10-1908:46:54【问题描述】:我正在尝试在登录ASP.NETCore3.1后获取用户信息(姓名、电子邮件、ID等信息...)。这是我在... 查看详情

如何在 ASP.NET Core 2.1 中获取客户端 IP 地址

】如何在ASP.NETCore2.1中获取客户端IP地址【英文标题】:HowtogetClientIPaddressinASP.NETCore2.1【发布时间】:2018-06-3015:57:12【问题描述】:我正在使用MicrosoftVisualStudio2017提供的Angular模板开发ASP.NetCore2.1。我的客户端应用程序运行良好。... 查看详情

在 ASP.NET Core 中获取浏览器语言?

】在ASP.NETCore中获取浏览器语言?【英文标题】:GetbrowserlanguageinASP.NETCore?【发布时间】:2018-08-2903:03:27【问题描述】:我正在尝试从浏览器获取默认语言,我使用以下代码获取它:varlanguages=HttpContext.Request.UserLanguages;由于.NETCore2... 查看详情

如何在 ASP.NET core rc2 中禁用浏览器缓存?

】如何在ASP.NETcorerc2中禁用浏览器缓存?【英文标题】:HowtodisablebrowsercacheinASP.NETcorerc2?【发布时间】:2016-07-0618:56:12【问题描述】:我尝试了这个中间件,但浏览器仍在保存文件。我希望用户始终获得最新版本的js和css文件。pub... 查看详情

如何在 ASP .NET CORE Identity 中通过 SignInManager 登录后获取用户声明?

】如何在ASP.NETCOREIdentity中通过SignInManager登录后获取用户声明?【英文标题】:HowtogetuserclaimsaftersigninthroughSignInManagerinASP.NETCOREIdentity?【发布时间】:2018-09-1607:18:41【问题描述】:我有一个ASP.NETCore2.0项目,我在其中使用Microsoft的... 查看详情

如何使用 ASP.NET Core 从 DbContext 中的 JWT 获取用户名?

】如何使用ASP.NETCore从DbContext中的JWT获取用户名?【英文标题】:HowtogetusernamefromJWTinDbContextusingASP.NETCore?【发布时间】:2018-11-2300:46:00【问题描述】:在MyDbContext中,我有方法LogChanges,它使用以下信息记录我的logs表中的任何更改... 查看详情

如何在 asp.net core razor 页面中拒绝匿名用户?

】如何在asp.netcorerazor页面中拒绝匿名用户?【英文标题】:Howtodenyanonymoususersinasp.netcorerazorpages?【发布时间】:2019-12-2810:40:06【问题描述】:如何拒绝匿名用户访问除登录页面之外的asp.netcore中的任何剃须刀页面?我试过了service... 查看详情

如何在 ASP.NET Core 中获取 HttpContext.Current? [复制]

】如何在ASP.NETCore中获取HttpContext.Current?[复制]【英文标题】:HowtogetHttpContext.CurrentinASP.NETCore?[duplicate]【发布时间】:2016-11-2823:44:31【问题描述】:我们目前正在使用ASP.NETCore重写/转换我们的ASP.NETWebForms应用程序。尽量避免重新... 查看详情

如何在 ASP.NET Core MVC 中获取 Url Referrer?

】如何在ASP.NETCoreMVC中获取UrlReferrer?【英文标题】:HowcanIgetUrlReferrerinASP.NETCoreMVC?【发布时间】:2016-08-0416:08:21【问题描述】:我正在尝试将ASP.NETMVC网络表单迁移到ASP.NETCoreMVC。目前,我在使用Request.UrlReferrer课程时遇到了问题... 查看详情

如何在 ASP.NET Core 中获取我网站的 baseurl?

】如何在ASP.NETCore中获取我网站的baseurl?【英文标题】:HowcanIgetthebaseurlofmysiteinASP.NETCore?【发布时间】:2017-04-2017:56:06【问题描述】:假设我的网站托管在www.example.com的mywebsite文件夹中,我访问了https://www.example.com/mywebsite/home/abo... 查看详情

如何在 ASP.NET Core(.NET 6、VS 2022)中禁用浏览器链接

】如何在ASP.NETCore(.NET6、VS2022)中禁用浏览器链接【英文标题】:HowtodisableBrowserLinkinASP.NETCore(.NET6,VS2022)【发布时间】:2021-12-2508:42:30【问题描述】:我已禁用VisualStudio2022中的浏览器链接,并且我还禁用了所有热重载功能。即... 查看详情

用户在 ASP.NET Core Identity 中打开设置页面时如何询问密码?

】用户在ASP.NETCoreIdentity中打开设置页面时如何询问密码?【英文标题】:HowtoaskforpasswordwhenuseropensettingspageinASP.NETCoreIdentity?【发布时间】:2021-09-0200:43:57【问题描述】:我在ASP.NETCore3.1中配置了Web应用程序以将ASP.NETCoreIdentity与本... 查看详情

如何在 ASP.NET CORE 3.1 中获取客户端 IP 地址?

】如何在ASP.NETCORE3.1中获取客户端IP地址?【英文标题】:HowdoIgetclientIPaddressinASP.NETCORE3.1?【发布时间】:2020-04-2921:06:39【问题描述】:在WebAPI项目中编写代码时如何在ASP.NET3.1中获取客户端IP地址【问题讨论】:这能回答你的问题... 查看详情

如何获取 ASP.NET Core 中所有路由的列表?

】如何获取ASP.NETCore中所有路由的列表?【英文标题】:HowtogetalistofallroutesinASP.NETCore?【发布时间】:2015-04-1017:24:11【问题描述】:在ASP.NETCore中,有没有办法查看Startup中定义的所有路由的列表?我们使用IRouteBuilder的MapRoute扩展... 查看详情