Подтвердить что ты не робот

Как я могу определить, поступает ли запрос от мобильного браузера в моем asp.net MVC 3

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

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

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

4b9b3361

Ответ 2

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

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
}

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

Ответ 3

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

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

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

Ответ 4

Использовать 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);
        }
    }
}

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

Используя 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

Раскрытие: я работаю для 51Degrees