Csharp: Detect Mobile Browsers

Source: Internet
Author: User
Tags servervariables

/// <Summary> /// register the client HttpCapabilitiesBase of the mobile phone. isMobileDevice ///. NET 4.5 // 文 /// </summary> public static class HttpRequestBaseExtensions {# region Private Fields // These regular expressions retrieved from http://detectmobilebrowser.com/"Open source mobile phone detection". private static Regex MobileBrowsers = new Regex (@ "android | avantgo | blackberry | blzer | compal | Eline | fennec | hiptop | iemob Ile | ip (hone | od) | iris | kindle | lge | maemo | midp | mmp | opera m (ob | in) I | palm (OS )? | Phone | p (ixi | re) \/| plucker | pocket | psp | symbian | treo | up \\. (browser | link) | vodafone | wap | windows (ce | phone) | xda | xiino | xiaomi | huawei ", RegexOptions. ignoreCase | RegexOptions. multiline ); private static Regex MobileApps = new Regex (@ "1207 | 6310 | 6590 | too so | 4thp | 50 [1-6] I | 770s | 802s | a wa | abac | ac (er | oo | s \\-) | ai (ko | rn) | al (av | ca | co) | amoi | an (ex | ny | yw) | aptu | ar (ch | go) | as (te | us) | attw | au (di | \-m | r | s) | avan | be (ck | ll | nq) | Bi (lb | rd) | bl (ac | az) | br (e | v) w | bumb | bw \-(n | u) | c55 \/| capi | ccwa | cdm \-| cell | chtm | cldc | cmd \-| co (mp | nd) | craw | da (it | ll | ng) | dbte | dc \-s | devi | dica | dmob | do (c | p) o | ds (12 | \-d) | el (49 | ai) | em (l2 | ul) | er (ic | k0) | esl8 | ez ([4-7] 0 | OS | wa | ze) | fetc | fly (\-| _) | g1 u | g560 | gene | gf \-5 | g \-mo | go (\\. w | od) | gr (ad | un) | haie | hcit | hd \-(m | p | t) | hei \-| hi (pt | ta) | hp (I | ip) | hs \-c | ht (c (\-| _ | a | g | p | s | t) | tp) | hu (aw | tc) | I \-(20 | go | ma) | I230 | iac (|\\- |\\/) | ibro | idea | ig01 | ikom | im1k | inno | ipaq | iris | ja (t | v) a | jbro | jemu | jigs | kddi | keji | kgt (|\\/) | klon | kpt | kwc \-| weight (c | k) | le (no | xi) | lg (g |\/ (k | l | u) | 50 | 54 | e \-| e \/| \-[a-w]) | libw | lynx | m1 \-w | m3ga | m50 \/| ma (te | ui | xo) | mc (01 | 21 | ca) | m \-cr | me (di | rc | ri) | mi (o8 | oa | ts) | mmef | mo (01 | 02 | bi | de | do | t (\-| o | v) | zz) | mt (50 | p1 | v) | mwbp | mywa | n10 [0-2] | n20 [2-3] | n30 (0 | 2) | n50 (0 | 2 | 5) | n7 (0 (0 | 1) | 10) | ne (c | m) \-| On | tf | wf | wg | wt) | nok (6 | I) | nzph | o2im | op (ti | wv) | oran | owg1 | p800 | pan (a | d | t) | pdxg | pg (13 |\- ([1-8] | c )) | phil | pire | pl (ay | uc) | pn \-2 | po (ck | rt | se) | prox | psio | pt \-g | qa \-a | qc (07 | 12 | 21 | 32 | 60 | \-[2-7] | I \ \-) | qtek | r380 | r600 | raks | rim9 | ro (ve | zo) | s55 \/| sa (ge | ma | mm | MS | ny | va) | SC (01 | h \-| oo | p \-) | sdk \/| se (c (\-| 0 | 1) | 47 | mc | nd | ri) | sgh \-| shar | sie (\-| m) | sk \-0 | sl (45 | id) | sm (al | ar | b3 | it | t5) | so (ft | ny) | sp (01 | h \-| v) | Sy (01 | mb) | t2 (18 | 50) | t6 (00 | 10 | 18) | ta (gt | lk) | tcl \-| tdg \-| tel (I | m) | tim \-| t \-mo | to (pl | sh) | ts (70 | m \-| m3 | m5) | tx \-9 | up (\\. B | g1 | si) | utst | v400 | v750 | veri | vi (rg | te) | vk (40 | 5 [0-3] | \-v) | vm40 | voda | vulc | vx (52 | 53 | 60 | 61 | 70 | 80 | 81 | 83 | 85 | 98) | w3c (\-|) | webc | whit | wi (g | nc | nw) | wmlb | wonu | x700 | xda (\-| 2 | g) | yas \-| your | zeto | zte \-", RegexOptions. ignoreCase | RegexOptions. multiline); # endregion public const string Vi EwMobileSiteCookieName = "ViewMobile"; // <summary> // Determines if the request emanated from a mobile-device client; and stores the result in a cookie on the response. /// </summary> /// <param name = "request"> </param> /// <param name = "Response"> </param> /// <returns> </returns> public static bool IsMobileClient (HttpRequestBase request, httpResponseBase Response) {bool isMobile = false; bool is CookieSet = false; var viewMobileCookie = request. Cookies [ViewMobileSiteCookieName]; if (viewMobileCookie! = Null & bool. tryParse (viewMobileCookie. value, out isMobile) {isCookieSet = true;} else if (request. browser. isMobileDevice) {isMobile = true;} else if (request. serverVariables ["HTTP_X_WAP_PROFILE"]. isNotEmpty () {isMobile = true;} else if (request. serverVariables ["HTTP_ACCEPT"]. isNotEmpty () & (request. serverVariables ["HTTP_ACCEPT"]. toLower (). contains ("wap") | request. serverVariables ["HT TP_ACCEPT "]. toLower (). contains ("wml + xml") {isMobile = true;} else if (request. serverVariables ["HTTP_USER_AGENT"]. isNotEmpty () {string userAgent = request. serverVariables ["HTTP_USER_AGENT"]; isMobile = (MobileBrowsers. isMatch (userAgent) | MobileApps. isMatch (userAgent. substring (0, 4);} // Store the result as a cookie. if (! IsCookieSet) Response. Cookies. Add (new HttpCookie (ViewMobileSiteCookieName, isMobile. ToString (); return isMobile ;}}

 

 

/// <Summary> /// judge terminal of the mobile phone ///. NET 2.0. NET 3.5 // juwen 2013-07-17 // http://detectmobilebrowser.com //// </summary> // <returns> </returns> public static bool isMobileBrowser () {// gets the current user context HttpContext context = HttpContext. current; // first try built in asp. nt check if (context. request. browser. isMobileDevice) {return true;} // then try checking for the HTTP_X_WAP_PROFILE HEADER if (context. Request. ServerVariables ["HTTP_X_WAP_PROFILE"]! = Null) {return true;} // then try checking that HTTP_ACCEPT exists and contains wap if (context. Request. ServerVariables ["HTTP_ACCEPT"]! = Null & context. request. serverVariables ["HTTP_ACCEPT"]. toLower (). contains ("wap") {return true;} // and finally check the HTTP_USER_AGENT // header variable for any one of the following if (context. request. serverVariables ["HTTP_USER_AGENT"]! = Null) {// Create a list of all mobile types string [] mobiles = new string [] {"midp", "J2EE", "avant", "docomo ", "novarra", "palmos", "palmsource", "240x320", "opwv", "chtml", "pda", "windows ce", "mmp /", "blackberry", "mib/", "symbian", "wireless", "nokia", "hand", "mobi", "phone", "cdm", "up. B "," audio "," SIE-"," SEC-"," samsung "," HTC "," mot-"," mitsu "," sagem ", "sony", "alcatel", "lg", "eric", "vx", "NEC", "philips", "mmm", "xx", "panasonic ", "sharp", "wap", "sch", "rover", "pocket", "benq", "java", "pt", "pg", "vox ", "amoi", "bird", "compal", "kg", "voda", "sany", "kdd", "dbt", "sendo", "sgh ", "gradi", "jb", "dddi", "moto", "iphone", "ipad", "ipod", "huawei", "xiaomi "}; // Loop through each item in the list created above // and check if the header contains that text foreach (string s in mobiles) {if (context. request. serverVariables ["HTTP_USER_AGENT"]. toLower (). contains (s. toLower () {return true ;}} return false ;}

 

 

// Exam site: http://detectmobilebrowsers.com/string u = Request. serverVariables ["HTTP_USER_AGENT"]; Regex B = new Regex (@ "(android | bb \ d + | meego ). + mobile | avantgo | bada \/| blackberry | blazer | compal | Eline | fennec | hiptop | iemobile | ip (hone | od) | iris | kindle | lge | maemo | midp | mmp | netfront | opera m (ob | in) I | palm (OS )? | Phone | p (ixi | re) \/| plucker | pocket | psp | series (4 | 6) 0 | symbian | treo | up \. (browser | link) | vodafone | wap | windows (ce | phone) | xda | xiino | huawei | xiaomi ", RegexOptions. ignoreCase | RegexOptions. multiline ); // Xiaomi MiTwo HUAWEI Regex v = new Regex (@ "1207 | 6310 | 6590 | too so | 4thp | 50 [1-6] I | 770s | 802s | a wa | abac | ac (er | oo | s \-) | ai (ko | rn) | al (av | ca | co) | amoi | an (ex | ny | yw) | aptu | ar (ch | go) | as (te | us) | attw | au (di | \-m | r | s) | avan | be (ck | ll | nq) | bi (lb | rd) | bl (ac | az) | br (e | v) w | bumb | bw \-(n | u) | c55 \/| capi | ccwa | cdm \-| cell | chtm | cldc | cmd \-| co (mp | nd) | craw | da (it | ll | ng) | dbte | dc \-s | devi | dica | dmob | do (c | p) o | ds (12 | \-d) | el (49 | ai) | em (l2 | ul) | er (ic | k0) | esl8 | ez ([4-7] 0 | OS | wa | ze) | fetc | fly (\-| _) | g1 u | g560 | gene | gf \-5 | g \-mo | go (\. w | od) | gr (ad | un) | haie | hcit | hd \-(m | p | t) | hei \-| hi (pt | ta) | hp (I | ip) | hs \-c | ht (c (\-| _ | a | g | p | s | t) | tp) | hu (aw | tc) | I \-(20 | go | ma) | i230 | iac (| \-| \/) | ibro | idea | ig01 | ikom | im1k | inno | ipaq | iris | ja (t | v) a | jbro | jemu | jigs | kddi | keji | kgt (|\/) | klon | kpt | kwc \-| weight (c | k) | le (no | xi) | lg (g | \/(k | l | u) | 50 | 54 | \-[a-w]) | libw | lynx | m1 \-w | m3ga | m50 \/| ma (te | ui | xo) | mc (01 | 21 | ca) | m \-cr | me (rc | ri) | mi (o8 | oa | ts) | mmef | mo (01 | 02 | bi | de | do | t (\-| o | v) | zz) | mt (50 | p1 | v) | mwbp | mywa | n10 [0-2] | n20 [2-3] | n30 (0 | 2) | n50 (0 | 2 | 5) | n7 (0 (0 | 1) | 10) | ne (c | m) \-| on | tf | wf | wg | wt) | nok (6 | I) | nzph | o2im | op (ti | wv) | oran | owg1 | p800 | pan (a | d | t) | pdxg | pg (13 | \-([1-8] | c) | phil | pire | pl (ay | uc) | pn \-2 | po (ck | rt | se) | prox | psio | pt \-g | qa \-a | qc (07 | 12 | 21 | 32 | 60 | \-[2-7] | I \-) | qtek | r380 | r600 | raks | rim9 | ro (ve | zo) | s55 \/| sa (ge | ma | mm | MS | ny | va) | SC (01 | h \-| oo | p \-) | sdk \/| se (c (\-| 0 | 1) | 47 | mc | nd | ri) | sgh \-| shar | sie (\-| m) | sk \-0 | sl (45 | id) | sm (al | ar | b3 | it | t5) | so (ft | ny) | sp (01 | h \-| v) | sy (01 | mb) | t2 (18 | 50) | t6 (00 | 10 | 18) | ta (gt | lk) | tcl \-| tdg \-| tel (I | m) | tim \-| t \-mo | to (pl | sh) | ts (70 | m \-| m3 | m5) | tx \-9 | up (\. B | g1 | si) | utst | v400 | v750 | veri | vi (rg | te) | vk (40 | 5 [0-3] | \-v) | vm40 | voda | vulc | vx (52 | 53 | 60 | 61 | 70 | 80 | 81 | 83 | 85 | 98) | w3c (\-|) | webc | whit | wi (g | nc | nw) | wmlb | wonu | x700 | yas \-| your | zeto | zte \-", RegexOptions. ignoreCase | RegexOptions. multiline); if (B. isMatch (u) | v. isMatch (u. substring (0, 4) {Response. redirect ("http://dusystem.com/mobile"); // mobile} else {Response. redirect ("http://www.dusystem.com/"); // No inbound PC Network}

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.