web-dev-qa-db-fra.com

Comment puis-je détecter si la demande provient d'un navigateur mobile dans mon asp.net MVC 3

ce que j'essaie de réaliser est simple. Parmi toutes les vues que j'ai dans mon application Web, je n'ai que deux vues rasoirs pour lesquelles j'ai créé une version mobile pour elles . Je dois donc rediriger les utilisateurs vers ces vues s'ils accèdent à l'application à partir de leur mobile. dispositifs. J'ai essayé ce qui suit au niveau du contrôleur, mais cela ne redirige pas les utilisateurs lorsque je lance mon test sur différents appareils mobiles: -

if (Request.Browser.IsMobileDevice)
            {
                return View("MobileStudentStartAssessment");
            }
            else {
                return View("StudentStartAssessment");
            }

Y a-t-il une autre approche que je peux suivre qui puisse détecter la plupart des appareils mobiles?

19
qalife4ever

Vous pouvez utiliser la propriété Request.Browser.IsMobileDevice

25
BFree

En supposant que votre vue mobile soit destinée à tous les appareils mobiles (plutôt que d'avoir des vues spécifiques à un appareil), vous pouvez inspecter la chaîne de l'agent utilisateur pour voir quelle vue vous devez retourner. Ceci est juste un exemple, mais devrait vous mener assez loin:

private static string[] mobileDevices = new string[] {"iphone","ppc",
                                                      "windows ce","blackberry",
                                                      "opera mini","mobile","Palm",
                                                      "portable","opera mobi" };

public static bool IsMobileDevice(string userAgent)  
{  
    // TODO: null check
    userAgent = userAgent.ToLower();  
    return mobileDevices.Any(x => userAgent.Contains(x));
}

Ensuite, dans l'action de votre contrôleur, vous pouvez appeler:

if (MobileHelper.IsMobileDevice(Request.UserAgent))
{
    // Return mobile view
}

Si vous constatez toujours qu'il ne reconnaît pas votre navigateur mobile, inspectez la chaîne d'agent d'utilisateur dans le débogueur et vérifiez s'il existe un identificateur que vous pouvez utiliser.

17
dlev

J'utilise le paquet 51degrees.mobi de nuget . Ceci est plus précis dans la détection de tous les différents appareils mobiles. Cela a fonctionné tout de suite.

Lorsque le navigateur est un appareil mobile, je le redirige vers une autre zone.

Je recommande également de lire le blog de Steve Sandersons sur le sujet.

12
DanMusk

Utilisez WURFL http://wurfl.sourceforge.net/dotnet_index.php

Si vous utilisez asp.net mvc, vous pouvez utiliser un ActionFilter

public class MobileActionFilterAttribute : ActionFilterAttribute
{
    // The WURFL database contains information about a huge number of devices and mobile browsers.
    // http://wurfl.sourceforge.net/
    // http://wurfl.sourceforge.net/dotnet_index.php
    // http://wurfl.sourceforge.net/help_doc.php

    private static readonly IWURFLManager WurflManager;

    static MobileActionFilterAttribute ()
    {
        IWURFLConfigurer configurer = new ApplicationConfigurer();
        WurflManager = WURFLManagerBuilder.Build(configurer);
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpRequestBase request = filterContext.RequestContext.HttpContext.Request;

        // We don't have ARR server for dev environment, so we still need to check to see if the current domain name is the mobile site.
        if (request.Url.AbsoluteUri.StartsWith(SiteConfiguration.Current.MobileSiteAddress, StringComparison.OrdinalIgnoreCase))
        {
            return;
        }

        // Creates a WURFLRequest object from an ASP.NET HttpRequest object
        WURFLRequest wurflRequest = WURFLRequestFactory.CreateRequest(HttpContext.Current.Request);

        // Indicates whether the current user agent string refers to a desktop agent.
        if (wurflRequest.IsDesktopRequest)
            return;

        // Get the information about the device
        IDevice deviceInfo = WurflManager.GetDeviceForRequest(wurflRequest);

        // Tells you if a device is a tablet computer (iPad and similar, regardless of OS)
        bool isTablet = string.Equals(deviceInfo.GetCapability("is_tablet") ?? string.Empty, "true", StringComparison.OrdinalIgnoreCase);

        if (isTablet)
        {
            // so we don't show the mobile site for iPad.
            return;
        }

        // Indicates whether the current user agent string refers to a mobile device.
        bool isMobileRequest = wurflRequest.IsMobileRequest;

        // Tells you if a device is wireless or not. Specifically a mobile phone or a PDA are considered wireless devices, a desktop PC or a laptop are not
        bool isWirelessDevice = string.Equals(deviceInfo.GetCapability("is_wireless_device") ?? string.Empty, "true", StringComparison.InvariantCultureIgnoreCase);

        if (isMobileRequest && isWirelessDevice)
        {
            // we can redirect to the mobile site!
            filterContext.Result = new RedirectResult(SiteConfiguration.Current.MobileSiteAddress);
        }
    }
}
1
superlogical

Utilisez l’API .Net Open Source de 51Degrees, que vous pouvez obtenir ici, https://github.com/51Degrees/dotNET-Device-Detection , vous pouvez détecter une grande variété d’appareils mobiles. 

Vous pouvez faire quelque chose de similaire à cela dans le fichier 51Degrees.config pour activer la redirection. 

<redirect devicesFile="" timeout="20" firstRequestOnly="true"
  originalUrlAsQueryString="false" mobileHomePageUrl="~/Mobile/StudentStartAssessment.aspx"
  mobilePagesRegex="/Mobile/">
  <locations>
    <clear />
    <location name="noredirect" url="" matchExpression="" enabled="true">
      <add property="Url" matchExpression="[&amp;|\?]noredirect" enabled="true" />
    </location>
    <location name="Mobile" url="~/Mobile/StudentStartAssessment.aspx" matchExpression=""
      enabled="true">
      <add property="IsMobile" matchExpression="True" enabled="true" />
    </location>
  </locations>
</redirect>

Pour plus d'informations à ce sujet, vous pouvez consulter ici https://51degrees.com/Developers/Documentation/APIs/NET-V32/Web-Apps/Configuration/Redirect

Divulgation: je travaille pour 51Degrees

0
Zarwalski

J'utilise cette méthode pour détecter le mobile et le desktop

if (eDurar.MobileDetect.DeviceType.Any(m => Request.UserAgent.Contains(m)))
{
    Layout = "~/Views/Shared/_mobileLayout.cshtml";
    @Html.Partial("mobileIndex");
}
else
{
    Layout = "~/Views/Shared/_Layout.cshtml";
    @Html.Partial("desktopIndex");
}
0
Arun Prasad E S

Vous pouvez utiliser 

   if (Request.Browser["IsMobileDevice"] == "true")
        {
        //Mobile Browser Detected
        }
   else
      {
       //Desktop Browser Detected
      }
0