Как я могу определить, поступил ли запрос с мобильного браузера в моем asp.net MVC 3? - PullRequest
20 голосов
/ 12 августа 2011

то, чего я пытаюсь достичь, просто;Из всех представлений, которые у меня есть в моем веб-приложении, у меня есть только два вида бритвы, для которых я создал мобильную версию.поэтому мне нужно перенаправить пользователей к этим представлениям, если они обращаются к приложению со своих мобильных устройств.я попробовал следующее на уровне контроллера, но он не перенаправил пользователей, когда я запускаю свой тест на разных мобильных устройствах: -

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

Так что есть другой подход, который я могу использовать, который может обнаружить большинство измобильные устройства?Спасибо

Ответы [ 7 ]

26 голосов
/ 12 августа 2011

Вы можете использовать свойство Request.Browser.IsMobileDevice.

18 голосов
/ 12 августа 2011

Предполагая, что ваше мобильное представление предназначено для всех мобильных устройств (вместо того, чтобы иметь представления для конкретного устройства), вы можете проверить строку пользовательского агента, чтобы увидеть, какое представление вы должны вернуть.Это всего лишь пример, но он поможет вам продвинуться довольно далеко:

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));
}

Затем, в вашем действии контроллера, вы можете позвонить:

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

Если вы все еще обнаружите, что он не распознаетв вашем мобильном браузере проверьте строку агента пользователя в отладчике и посмотрите, есть ли идентификатор, который вы можете использовать.

12 голосов
/ 12 августа 2011

Я использую пакет 51degrees.mobi из nuget . Это более точно при обнаружении всех мобильных устройств. Это сработало сразу.

Когда браузер является мобильным устройством, я перенаправляю его в другую область.

Я также рекомендую прочитать блог Стива Сандерсонса по теме.

1 голос
/ 30 ноября 2012

Использовать WURFL http://wurfl.sourceforge.net/dotnet_index.php

Если вы используете asp.net mvc, вы можете использовать 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);
        }
    }
}
0 голосов
/ 12 апреля 2017

Используя 51Degrees '.Net Api с открытым исходным кодом, который вы можете получить здесь, https://github.com/51Degrees/dotNET-Device-Detection, вы можете обнаружить огромное разнообразие мобильных устройств.

Вы можете сделать что-то подобное в файле 51Degrees.config, чтобы включить перенаправление.

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

Подробнее об этом вы можете посмотреть здесь https://51degrees.com/Developers/Documentation/APIs/NET-V32/Web-Apps/Configuration/Redirect

Раскрытие информации: я работаю на 51 градусов

0 голосов
/ 04 августа 2016

Вы можете использовать

   if (Request.Browser["IsMobileDevice"] == "true")
        {
        //Mobile Browser Detected
        }
   else
      {
       //Desktop Browser Detected
      }
0 голосов
/ 27 мая 2016

Я использую этот метод для обнаружения мобильных и настольных компьютеров

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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...