最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET/C#實現(xiàn)識別用戶訪問設備的方法

 更新時間:2017年02月10日 11:41:51   作者:Mr-Robot  
這篇文章主要介紹了.NET/C#實現(xiàn)識別用戶訪問設備的方法,結(jié)合實例形式分析了C#識別用戶訪問設備的操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了.NET/C#實現(xiàn)識別用戶訪問設備的方法。分享給大家供大家參考,具體如下:

一、需求

需要獲取到用戶訪問網(wǎng)站時使用的設備,根據(jù)不同設備返回不同類型的渲染頁面。

二、實現(xiàn)前準備

通過NuGet把UAParser程序包添加到項目中

三、實現(xiàn)

新建UAParseUserAgent類文件,在這個文件中進行實現(xiàn)。

實現(xiàn)代碼如下:

public class UAParserUserAgent
{
    private readonly static uap.Parser s_uap;
    private static readonly Regex s_pdfConverterPattern = new Regex(@"wkhtmltopdf", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
    # region Mobile UAs, OS & Devices
    private static readonly HashSet<string> s_MobileOS = new HashSet<string>
    {
      "Android",
      "iOS",
      "Windows Mobile",
      "Windows Phone",
      "Windows CE",
      "Symbian OS",
      "BlackBerry OS",
      "BlackBerry Tablet OS",
      "Firefox OS",
      "Brew MP",
      "webOS",
      "Bada",
      "Kindle",
      "Maemo"
    };
    private static readonly HashSet<string> s_MobileBrowsers = new HashSet<string>
    {
      "Android",
      "Firefox Mobile",
      "Opera Mobile",
      "Opera Mini",
      "Mobile Safari",
      "Amazon Silk",
      "webOS Browser",
      "MicroB",
      "Ovi Browser",
      "NetFront",
      "NetFront NX",
      "Chrome Mobile",
      "Chrome Mobile iOS",
      "UC Browser",
      "Tizen Browser",
      "Baidu Explorer",
      "QQ Browser Mini",
      "QQ Browser Mobile",
      "IE Mobile",
      "Polaris",
      "ONE Browser",
      "iBrowser Mini",
      "Nokia Services (WAP) Browser",
      "Nokia Browser",
      "Nokia OSS Browser",
      "BlackBerry WebKit",
      "BlackBerry", "Palm",
      "Palm Blazer",
      "Palm Pre",
      "Teleca Browser",
      "SEMC-Browser",
      "PlayStation Portable",
      "Nokia",
      "Maemo Browser",
      "Obigo",
      "Bolt",
      "Iris",
      "UP.Browser",
      "Minimo",
      "Bunjaloo",
      "Jasmine",
      "Dolfin",
      "Polaris",
      "Skyfire"
    };
    private static readonly HashSet<string> s_MobileDevices = new HashSet<string>
    {
      "BlackBerry",
      "MI PAD",
      "iPhone",
      "iPad",
      "iPod",
      "Kindle",
      "Kindle Fire",
      "Nokia",
      "Lumia",
      "Palm",
      "DoCoMo",
      "HP TouchPad",
      "Xoom",
      "Motorola",
      "Generic Feature Phone",
      "Generic Smartphone"
    };
    #endregion
    private readonly HttpContextBase _httpContext;
    private string _rawValue;
    private UserAgentInfo _userAgent;
    private DeviceInfo _device;
    private OSInfo _os;
    private bool? _isBot;
    private bool? _isMobileDevice;
    private bool? _isTablet;
    private bool? _isPdfConverter;
    static UAParserUserAgent()
    {
      s_uap = uap.Parser.GetDefault();
    }
    public UAParserUserAgent(HttpContextBase httpContext)
    {
      this._httpContext = httpContext;
    }
    public string RawValue
    {
      get
      {
        if (_rawValue == null)
        {
          if (_httpContext.Request != null)
          {
            _rawValue = _httpContext.Request.UserAgent.ToString();
          }
          else
          {
            _rawValue = "";
          }
        }
        return _rawValue;
      }
      // for (unit) test purpose
      set
      {
        _rawValue = value;
        _userAgent = null;
        _device = null;
        _os = null;
        _isBot = null;
        _isMobileDevice = null;
        _isTablet = null;
        _isPdfConverter = null;
      }
    }
    public virtual UserAgentInfo UserAgent
    {
      get
      {
        if (_userAgent == null)
        {
          var tmp = s_uap.ParseUserAgent(this.RawValue);
          _userAgent = new UserAgentInfo(tmp.Family, tmp.Major, tmp.Minor, tmp.Patch);
        }
        return _userAgent;
      }
    }
    public virtual DeviceInfo Device
    {
      get
      {
        if (_device == null)
        {
          var tmp = s_uap.ParseDevice(this.RawValue);
          _device = new DeviceInfo(tmp.Family, tmp.IsSpider);
        }
        return _device;
      }
    }
    public virtual OSInfo OS
    {
      get
      {
        if (_os == null)
        {
          var tmp = s_uap.ParseOS(this.RawValue);
          _os = new OSInfo(tmp.Family, tmp.Major, tmp.Minor, tmp.Patch, tmp.PatchMinor);
        }
        return _os;
      }
    }
    public virtual bool IsBot
    {
      get
      {
        if (!_isBot.HasValue)
        {
          _isBot = _httpContext.Request.Browser.Crawler || this.Device.IsBot;
        }
        return _isBot.Value;
      }
    }
    public virtual bool IsMobileDevice
    {
      get
      {
        if (!_isMobileDevice.HasValue)
        {
          _isMobileDevice =
            s_MobileOS.Contains(this.OS.Family) ||
            s_MobileBrowsers.Contains(this.UserAgent.Family) ||
            s_MobileDevices.Contains(this.Device.Family);
        }
        return _isMobileDevice.Value;
      }
    }
    public virtual bool IsTablet
    {
      get
      {
        if (!_isTablet.HasValue)
        {
          _isTablet =
            Regex.IsMatch(this.Device.Family, "iPad|Kindle Fire|Nexus 10|Xoom|Transformer|MI PAD|IdeaTab", RegexOptions.CultureInvariant) ||
            this.OS.Family == "BlackBerry Tablet OS";
        }
        return _isTablet.Value;
      }
    }
    public virtual bool IsPdfConverter
    {
      get
      {
        if (!_isPdfConverter.HasValue)
        {
          _isPdfConverter = s_pdfConverterPattern.IsMatch(this.RawValue);
        }
        return _isPdfConverter.Value;
      }
    }
}
public sealed class DeviceInfo
{
    public DeviceInfo(string family, bool isBot)
    {
      this.Family = family;
      this.IsBot = isBot;
    }
    public override string ToString()
    {
      return this.Family;
    }
    public string Family { get; private set; }
    public bool IsBot { get; private set; }
}
public sealed class OSInfo
{
    public OSInfo(string family, string major, string minor, string patch, string patchMinor)
    {
      this.Family = family;
      this.Major = major;
      this.Minor = minor;
      this.Patch = patch;
      this.PatchMinor = patchMinor;
    }
    public override string ToString()
    {
      var str = VersionString.Format(Major, Minor, Patch, PatchMinor);
      return (this.Family + (!string.IsNullOrEmpty(str) ? (" " + str) : null));
    }
    public string Family { get; private set; }
    public string Major { get; private set; }
    public string Minor { get; private set; }
    public string Patch { get; private set; }
    public string PatchMinor { get; private set; }
    private static string FormatVersionString(params string[] parts)
    {
      return string.Join(".", (from v in parts
                   where !string.IsNullOrEmpty(v)
                   select v).ToArray<string>());
    }
}
public sealed class UserAgentInfo
{
    public UserAgentInfo(string family, string major, string minor, string patch)
    {
      this.Family = family;
      this.Major = major;
      this.Minor = minor;
      this.Patch = patch;
    }
    public override string ToString()
    {
      var str = VersionString.Format(Major, Minor, Patch);
      return (this.Family + (!string.IsNullOrEmpty(str) ? (" " + str) : null));
    }
    public string Family { get; private set; }
    public string Major { get; private set; }
    public string Minor { get; private set; }
    public string Patch { get; private set; }
}
internal static class VersionString
{
    public static string Format(params string[] parts)
    {
      return string.Join(".", (from v in parts
                   where !string.IsNullOrEmpty(v)
                   select v).ToArray<string>());
    }
}

控制器中代碼:

UAParserUserAgent userAgent = new UAParserUserAgent(this.HttpContext);
dto.OSInfo = userAgent.OS.ToString();
dto.Device = userAgent.Device.ToString() != "Other" ? userAgent.Device.ToString() : "電腦";
dto.Agent = userAgent.UserAgent.ToString();
dto.RawValue = userAgent.RawValue.ToString();
//if (userAgent.IsMobileDevice)
//{
//  Debug.WriteLine("這是一個手機");
//  ViewBag.MobilePc = "手機";
//}
//else if (userAgent.IsTablet)
//{
//  ViewBag.MobilePc = "平板";
//  Debug.WriteLine("這是一個平板");
//}
//else
//{
//  ViewBag.MobilePc = "普通電腦";
//  Debug.WriteLine("這是一個普通電腦");
//}

更多關于C#相關內(nèi)容感興趣的讀者可查看本站專題:《C#程序設計之線程使用技巧總結(jié)》、《WinForm控件用法總結(jié)》、《C#中XML文件操作技巧匯總》、《C#常見控件用法教程》、《C#數(shù)據(jù)結(jié)構與算法教程》、《C#數(shù)組操作技巧總結(jié)》及《C#面向?qū)ο蟪绦蛟O計入門教程

希望本文所述對大家C#程序設計有所幫助。

相關文章

  • 詳解c# 線程同步

    詳解c# 線程同步

    這篇文章主要介紹了c# 線程同步的相關資料,文中講解非常細致,示例代碼幫助大家更好的理解和學習c# 多線程,感興趣的朋友可以了解下
    2020-07-07
  • Unity Shader實現(xiàn)徑向模糊效果

    Unity Shader實現(xiàn)徑向模糊效果

    這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)徑向模糊效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C#實現(xiàn)數(shù)字轉(zhuǎn)換

    C#實現(xiàn)數(shù)字轉(zhuǎn)換

    這篇文章主要為大家詳細介紹了C#實現(xiàn)數(shù)字轉(zhuǎn)換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C#中datagridview使用tooltip控件顯示單元格內(nèi)容的方法

    C#中datagridview使用tooltip控件顯示單元格內(nèi)容的方法

    這篇文章主要介紹了C#中datagridview使用tooltip控件顯示單元格內(nèi)容的方法,實例分析了C#控件的相關使用技巧,需要的朋友可以參考下
    2016-06-06
  • C#?md5?算法實現(xiàn)代碼

    C#?md5?算法實現(xiàn)代碼

    相對C#來說,md5算法就相對簡單很多,因為?System.Security.Cryptography;?已經(jīng)包含了md5算法。所以我們只需創(chuàng)建MD5類對象即可實現(xiàn)md5算法,今天通過本文給大家介紹C#?md5?算法實現(xiàn),感興趣的朋友一起看看吧
    2022-11-11
  • C#使用WebClient實現(xiàn)上傳下載

    C#使用WebClient實現(xiàn)上傳下載

    這篇文章介紹了C#使用WebClient實現(xiàn)上傳下載的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#中高效的多線程并行處理實現(xiàn)方式詳解

    C#中高效的多線程并行處理實現(xiàn)方式詳解

    在處理大型數(shù)據(jù)集時,單線程處理往往成為性能瓶頸,所以本文將詳細介紹幾種高效的多線程并行處理實現(xiàn)方式,幫助開發(fā)者優(yōu)化數(shù)據(jù)處理流程,有需要的可以了解下
    2025-04-04
  • c#剪切板操作的簡單實例

    c#剪切板操作的簡單實例

    這篇文章介紹了c#剪切板操作的簡單實例,有需要的朋友可以參考一下
    2013-11-11
  • C#中將xml文件反序列化為實例時采用基類還是派生類的知識點討論

    C#中將xml文件反序列化為實例時采用基類還是派生類的知識點討論

    在本篇文章里小編給大家整理的是關于C#中將xml文件反序列化為實例時采用基類還是派生類的知識點討論,有需要的朋友們學習下。
    2019-11-11
  • C# 利用代理爬蟲網(wǎng)頁的實現(xiàn)方法

    C# 利用代理爬蟲網(wǎng)頁的實現(xiàn)方法

    這篇文章主要介紹了C# 利用代理爬網(wǎng)頁的實現(xiàn)方法的相關資料,希望通過本能幫助到大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10

最新評論

霍林郭勒市| 兰溪市| 朝阳区| 开江县| 阳高县| 同江市| 丰原市| 进贤县| 和林格尔县| 金溪县| 阿拉善盟| 化州市| 弋阳县| 湄潭县| 延津县| 嵊州市| 莒南县| 栾城县| 南宁市| 阿荣旗| 瓦房店市| 泉州市| 泰宁县| 监利县| 临高县| 洞口县| 镇沅| 甘泉县| 荔浦县| 蓝山县| 朝阳县| 青岛市| 西青区| 城市| 门源| 天柱县| 柞水县| 黄浦区| 文化| 泰来县| 建德市|