/// <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}