Asp.net Core'da kullanıcı Tarayıcı adı (kullanıcı aracısı) nasıl elde edilir?


Yanıtlar:


172

Bunun kolay olduğunu düşünüyorum. Cevabı aldımRequest.Headers["User-Agent"].ToString()

Teşekkürler


11
bu tüm tarayıcı adlarını bana döndürdü
kobosh

4
@koboshRequest.Headers["User-Agent"].ToString()
Andriy Tolstoy

10
İsteğin User-Agent yoksa KeyNotFoundException ile sonuçlanacağına dikkat edin! Kontrol etmek için önce .ContainsKey'i kullandığınızdan emin olun!
user169771

12
Kaşı onu. bunun yerine bir nedenle "" döndürür. Yaşasın tutarlılık ...
user169771

39
Bazıları Request.Headers[HeaderNames.UserAgent]değişmez dizeden kaçınmayı tercih edebilir (Core 1.0'da çalışmamış olabilir, emin değilim)
Will Dean

24

Benim için Request.Headers["User-Agent"].ToString()tüm tarayıcı adlarını döndürmeye yardımcı olmadı, bu nedenle aşağıdaki çözümü buldum.

Yüklü ua-ayrıştırma . Denetleyicideusing UAParser;

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

Yukarıdaki kodu kullandıktan sonra userAgent'tan tarayıcı ayrıntılarını kullanarak c.UserAgent.Family aşağıdaki gibi işletim sistemi ayrıntılarını da alabilirsiniz.c.OS.Family;


2
Tam olarak ihtiyacım olan şey!
Eric

3
Bu, tüm tarayıcı adlarının bir listesi değildir, tarayıcının Kullanıcı Aracı olarak ayarladığı şey budur. UAParser, tüm bu isimleri nasıl alacağını ve gerçek tarayıcının ve işletim sisteminin ne olduğunu belirler.
John C

18

Küçük kısa yararlı yazdığınız için teşekkürler
FindOutIslamNow

Bu bağlantı en iyi cevaptır. Kullanıcı-Aracı dizesi, sürüm bilgilerini almak için deşifre etmeniz ve ayrıştırmanız gereken bir dizedir. Orada verilen sınıflar tüm zor işi yapıyor.
JustLooking

Teşekkür ederim! geri bildirim için Güncellendi!
Uzay

9

Wangkanai'de web istemcisi tarayıcı bilgileri algılamayı desteklemek için ASP.NET Core'u genişletmek için bir kitaplık geliştirdim. Algılama Bu, tarayıcı adını tanımlamanıza izin vermelidir.

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

Bu nasıl çalışıyor? Bunun DeviceResolver.csmobil mi, masa mı yoksa masaüstü mü olduğunu öğrenmeniz gerekiyor, ancak kullanıcı aracısı başlığının ayrıntılarını çıkarmak için benzer bir kod göremiyorum.
thoean

Depoyu güncelledim ve benioku daha olgunlaşıyor. github.com/wangkanai/Detection
Sarin Na Wangkanai

0

Bu .nuget paketini yükleyin

bunun gibi bir sınıf oluşturun:

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


    }

denetleyicinizde http başlıklarından kullanıcı aracısını okuyabilirsiniz:

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

Daha sonra kullanıcı aracısını ayrıştırabilirsiniz:

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

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

güven düzeyini de elde edebilirsiniz (daha yüksek, daha iyi):

 var confidence = ua.Get(UserAgent.AGENT_NAME).GetConfidence();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.