Mobile REdirection

Can anyone see why this will not work?
Imports System.Web
Imports System.Text
Imports System.Text.RegularExpressions

Namespace TurboKits

    Public Class Browsers

        Public Property UsersAgent As String
        Public Property BrowserAccept As String
        Public Property BrowserWAPProfile As String
        Public Property UserBrowser


        ''' <summary>
        ''' Check for a mobile device
        ''' </summary>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function IsMobile() As Boolean
            Try
                If UserBrowser.IsMobileDevice Then
                    Return True
                Else
                    'Try checking for the HTTP_X_WAP_PROFILE Header
                    If Not (IsNothing(BrowserWAPProfile)) Then
                        Return True
                    Else
                        'Check to see if HTTP_ACCEPT contains wap
                        If Not (IsNothing(BrowserAccept)) And (LCase(BrowserAccept).Contains("wap")) Then
                            Return True
                        Else
                            'If all else has failed, then chekc the user-agent
                            Dim objUA As String = LCase(UsersAgent)
                            Dim objRegEx1 As New Regex("(iphone|windows ce|blackberry|opera (mini|mobi)|mobile|palm|portable|windows phone|avantgo|docomo|ipod|ipad|up\.|android|dolfin|fennec|gobrowser|nokia|iemobile|jasmine|tablet|minimo|mot-|netfront|playstation|kindle|hiptop|symbianos|obigo|samsung|alcatel|lg-|webos|polaris|sonyericsson|semc|skyfire|tear|teashark|ucweb|uzardweb|midp|j2me|novarra|palmos|palmsource|240x320|opwv|chtml|pda|htc|panasonic|sony|pocket|dolphin|android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|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)", RegexOptions.IgnoreCase)
                            Dim objRegEx2 As New Regex("(1207|6310|6590|3gso|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\-|kyo(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\-|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)
                            If objRegEx1.IsMatch(objUA) Or objRegEx2.IsMatch(Left(objUA, 4)) Then
                                Return True
                            Else
                                Return False
                            End If
                            objRegEx1 = Nothing : objRegEx2 = Nothing
                        End If
                    End If
                End If
            Catch ex As Exception
                Dim objErr As New TurboKits.ErrorManager
                objErr.Location = "Browsers - IsMobile"
                objErr.Stack = ex.StackTrace()
                objErr.Except = ex
                objErr.ParseError()
                objErr = Nothing
                Return False
            End Try
        End Function

    End Class

End Namespace

Open in new window


On emulators, it seems to do the trick, but on my iPhone, my boss's iPhone, his friends Android, it does not work in production.

In staging it works just fine.  Both sites reside on the same server, and are configured the exact same.
LVL 25
kevp75Asked:
Who is Participating?
 
strickddConnect With a Mentor Commented:
This is what I use. It is a RegEx on the user agent. It has caught every device connected so far, I work for a University and we have a lot of students connecting. You can get this RegEx string here - http://detectmobilebrowser.com/.

Dim u As String = Request.ServerVariables("HTTP_USER_AGENT")
Dim b As New Regex("android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|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", RegexOptions.IgnoreCase)
Dim v As New Regex("1207|6310|6590|3gso|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\-|kyo(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\-|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)
If b.IsMatch(u) Or v.IsMatch(Left(u, 4)) Then Response.Redirect("MyMobilePage.aspx")
0
 
kevp75Author Commented:
the exception section is producing me:

Object reference not set to an instance of an object.


no line number
0
 
Rahul AgarwalConnect With a Mentor Team LeaderCommented:
Link:

http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_2298-ASP-NET-Mobile-Device-Detection-and-Redirection.html


Its a useful for you this article explains for ASP.NET mobile development to determine if an HTTP request is coming from a mobile phone and then redirecting the request to a page optimized for a mobile browser.

Please go through it may it works for you as well.
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
kevp75Author Commented:
can't use 3rd party.

Plus what I have works in one site, but does not work in another...  and there is an error thrown
0
 
kevp75Author Commented:
:)  that's where I got mine from..  i just added a few extras to it.
0
 
strickddCommented:
then the issue you are having is probably the same as mine. The User Agent string is not passed by the browser that is connecting to the page. You have to check if Request.ServerVariables["User_Agent"] = null
0
 
kevp75Author Commented:
is there another method to get that if it is null?
0
 
strickddCommented:
Nope, if it is null, then the browser isn't passing it. We had issues where our BigIP was hitting the page and caused error after error since it didn't have a user agent. In the end it detected the site as offline and would load the page for any user.
0
 
kevp75Author Commented:
is there another method to doing this?   I can't believe that I would simply have to rely on a 3rd party service to do it for me...
0
 
strickddCommented:
There is, but is it no longer supported: http://mdbf.codeplex.com/.
0
All Courses

From novice to tech pro — start learning today.