คุณช่วยแจ้งวิธีรับชื่อเบราว์เซอร์ที่ลูกค้าใช้ใน MVC 6, ASP.NET 5 ได้ไหม
คุณช่วยแจ้งวิธีรับชื่อเบราว์เซอร์ที่ลูกค้าใช้ใน MVC 6, ASP.NET 5 ได้ไหม
คำตอบ:
ฉันคิดว่านี่เป็นเรื่องง่าย มีคำตอบในRequest.Headers["User-Agent"].ToString()
ขอบคุณ
Request.Headers["User-Agent"].ToString()
Request.Headers[HeaderNames.UserAgent]
หลีกเลี่ยงการใช้สตริงตามตัวอักษร (อาจไม่ได้ทำงานใน Core 1.0 ไม่แน่ใจ)
สำหรับฉัน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;
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
ฉันได้พัฒนาไลบรารีเพื่อขยาย 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
พบว่าเป็นอุปกรณ์เคลื่อนที่โต๊ะหรือเดสก์ท็อป แต่ฉันไม่เห็นรหัสที่คล้ายกันเพื่อดึงรายละเอียดของส่วนหัวตัวแทนผู้ใช้
ติดตั้งแพ็คเกจ. 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();