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.