จะรับชื่อผู้ใช้เบราว์เซอร์ (user-agent) ใน Asp.net Core ได้อย่างไร


คำตอบ:


165

ฉันคิดว่านี่เป็นเรื่องง่าย มีคำตอบในRequest.Headers["User-Agent"].ToString()

ขอบคุณ


10
สิ่งนี้คืนชื่อเบราว์เซอร์ทั้งหมดให้ฉัน
kobosh

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

10
ระวังสิ่งนี้จะเกิดขึ้นหาก KeyNotFoundException หากคำขอไม่มี User-Agent! อย่าลืมใช้ .ContainsKey ก่อนเพื่อตรวจสอบ!
user169771

12
เกานั่นแหละ มันจะส่งคืน "" แทนด้วยเหตุผลบางประการ ไชโยเพื่อความสอดคล้อง ...
user169771

38
บางคนอาจต้องการRequest.Headers[HeaderNames.UserAgent]หลีกเลี่ยงการใช้สตริงตามตัวอักษร (อาจไม่ได้ทำงานใน Core 1.0 ไม่แน่ใจ)
Will Dean

24

สำหรับฉันRequest.Headers["User-Agent"].ToString()ไม่ได้ช่วยในการคืนชื่อเบราว์เซอร์ทั้งหมดดังนั้นพบวิธีแก้ปัญหาต่อไปนี้

ติดตั้งUA-แจง ในตัวควบคุมusing UAParser;

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

หลังจากใช้รหัสด้านบนสามารถรับรายละเอียดเบราว์เซอร์จาก userAgent ได้โดยใช้c.UserAgent.Family คุณสามารถรับรายละเอียดระบบปฏิบัติการเช่นc.OS.Family;


2
สิ่งที่ฉันต้องการ!
Eric

2
นั่นไม่ใช่รายชื่อเบราว์เซอร์ทั้งหมดนั่นคือสิ่งที่เบราว์เซอร์กำหนดให้เป็น User-Agent UAParser รู้วิธีใช้ชื่อเหล่านั้นทั้งหมดและกำหนดว่าเบราว์เซอร์และระบบปฏิบัติการจริงเป็นอย่างไร
John C

17

ขอบคุณที่เขียนข้อความสั้น ๆ ที่เป็นประโยชน์
FindOutIslamNow

ลิงค์นั้นคือคำตอบที่ดีที่สุด สตริง User-Agent คือสตริงที่คุณต้องถอดรหัสและแยกวิเคราะห์เพื่อรับข้อมูลเวอร์ชัน ชั้นเรียนที่จัดให้มีงานหนักทั้งหมด
JustLooking

ขอบคุณ! สำหรับข้อเสนอแนะอัปเดต!
Uzay

9

ฉันได้พัฒนาไลบรารีเพื่อขยาย ASP.NET Core เพื่อรองรับการตรวจจับข้อมูลเว็บบราวเซอร์ที่วังขนายการตรวจจับสิ่งนี้จะช่วยให้คุณระบุชื่อเบราว์เซอร์ได้

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พบว่าเป็นอุปกรณ์เคลื่อนที่โต๊ะหรือเดสก์ท็อป แต่ฉันไม่เห็นรหัสที่คล้ายกันเพื่อดึงรายละเอียดของส่วนหัวตัวแทนผู้ใช้
thoean

ฉันได้อัปเดต repo แล้วและ readme เริ่มเป็นผู้ใหญ่มากขึ้น github.com/wangkanai/Detection
สาริน ณ วังขนาย

0

ติดตั้งแพ็คเกจ. nugetนี้

สร้างคลาสดังนี้:

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();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.