Bagaimana cara mendapatkan nama Browser pengguna (agen pengguna) di Asp.net Core?

106

Bisakah Anda memberi tahu saya cara mendapatkan nama browser yang digunakan klien di MVC 6, ASP.NET 5?

eadam
sumber

Jawaban:

165

Saya pikir ini mudah. Dapatkan jawabannyaRequest.Headers["User-Agent"].ToString()

Terima kasih

eadam
sumber
10
ini mengembalikan semua nama browser kepada saya
kobosh
4
@koboshRequest.Headers["User-Agent"].ToString()
Andriy
10
Hati-hati ini akan terjadi jika KeyNotFoundException jika permintaan tidak memiliki User-Agent! Pastikan untuk menggunakan .ContainsKey terlebih dahulu untuk diperiksa!
pengguna169771
12
Gores itu. ia hanya mengembalikan "" karena alasan tertentu. Hore untuk konsistensi ...
pengguna169771
38
Beberapa mungkin lebih suka Request.Headers[HeaderNames.UserAgent]menghindari string literal (mungkin tidak bekerja di Core 1.0, tidak yakin)
Will Dean
24

Bagi saya tidak Request.Headers["User-Agent"].ToString()membantu karena mengembalikan semua nama browser sehingga menemukan solusi berikut.

Ua-parse diinstal . Dalam pengontrolusing UAParser;

var userAgent = httpContext.Request.Headers["User-Agent"];
string uaString = Convert.ToString(userAgent[0]);
var uaParser = Parser.GetDefault();
ClientInfo c = uaParser.Parse(uaString);

setelah menggunakan kode di atas bisa mendapatkan detail browser dari userAgent dengan menggunakan c.UserAgent.Family Anda juga bisa mendapatkan detail OS sepertic.OS.Family;

Aneeq Azam Khan
sumber
2
Persis yang saya butuhkan!
Eric
2
Itu bukan daftar semua nama browser, itulah yang diatur browser sebagai User-Agent. UAParser tahu cara mengambil semua nama itu dan menentukan browser dan OS yang sebenarnya.
John C
17
userAgent = Request.Headers["User-Agent"]; 

https://code.msdn.microsoft.com/How-to-get-OS-and-browser-c007dbf7 (tautan tidak langsung) gunakan 4.8

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

Uzay
sumber
Terima kasih telah menulis singkat kecil berguna
FindOutIslamNow
Tautan itu adalah jawaban terbaik. String User-Agent adalah string yang harus Anda pecahkan dan uraikan untuk mendapatkan informasi versi. Kelas-kelas yang disediakan di sana melakukan semua kerja keras.
JustLooking
Terima kasih! untuk umpan balik Diperbarui!
Uzay
9

Saya telah mengembangkan perpustakaan untuk memperluas ASP.NET Core untuk mendukung deteksi informasi browser klien web di Wangkanai.Detection Ini akan memungkinkan Anda mengidentifikasi nama browser.

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());
        }
    }
}
Sarin Na Wangkanai
sumber
Bagaimana cara kerjanya? Saya melihat Anda harus DeviceResolver.csmencari tahu apakah itu seluler, tabel, atau desktop, tetapi saya tidak dapat melihat kode serupa untuk mengekstrak detail dari header agen pengguna.
thoean
Saya telah memperbarui repo dan readme menjadi lebih matang. github.com/wangkanai/Detection
Sarin Na Wangkanai
0

Pasang ini paket .nuget

buat kelas seperti ini:

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();
        }


    }

di pengontrol Anda, Anda dapat membaca agen pengguna dari header http:

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

Kemudian Anda dapat mengurai agen pengguna:

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

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

Anda juga bisa mendapatkan tingkat kepercayaan (lebih tinggi lebih baik):

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