Как обнаружить планшетные (любые) запросы?

 if (Request.Browser.IsMobileDevice)
 {
     Response.Redirect("/mobile/Login.htm");`
 }

Чтобы обнаружить мобильные телефоны, но в то же время они обнаруживают планшет как мобильный, мне нужна функция, которая проверяет, есть ли планшет или функция, которые проверяют размер экрана устройства.

Спасибо, что я использовал ScreenPixelsWidth и ScreenPixelsHeight, это код, если он нужен.

 int wight = Request.Browser.ScreenPixelsWidth;
                int height = Request.Browser.ScreenPixelsHeight;

                if (Request.Browser.IsMobileDevice && wight < 720 && height<1280)
            {
               Response.Redirect("/mobile/Login.htm");
            }

Ответ 1

Вы можете использовать ScreenPixelsWidth и ScreenPixelsHeight (http://msdn.microsoft.com/en-us/library/system.web.httpbrowsercapabilities.aspx), и вы можете определить порог, в котором вы считаете, должна ли отображаться обычная или мобильная версия.

Есть много способов решить эту проблему, но поскольку вы уже используете класс HttpBrowserCapabilities, вы можете также использовать эти 2 свойства.

Ответ 2

У меня была аналогичная проблема и я попытался использовать:   HttpContext.Request.Browser.ScreenPixelsWidth

Однако это всегда возвращало значение 640 пикселей независимо от устройства (iphone или ipad). Я решил проблему, создав статический метод для проверки строки User Agent.

public class DeviceHelper
{
    public static bool IsTablet(string userAgent, bool isMobile)
    {
        Regex r = new Regex("ipad|android|android 3.0|xoom|sch-i800|playbook|tablet|kindle|nexus");
        bool isTablet = r.IsMatch(userAgent) && isMobile;
        return isTablet;
    }
}

Затем в моем контроллере:

if(DeviceHelper.IsTablet(Request.UserAgent, Request.Browser.IsMobileDevice))
     return Redirect("..."); // redirect to tablet url

Ответ 3

ScreenPixelsWidth всегда возвращает 640, поэтому не помогает при обнаружении телефонов. Я нашел, что это работает:

public static bool IsPhoneDevice(this HttpBrowserCapabilitiesBase Browser)
{
      return (Browser.IsMobileDevice && Browser.CanInitiateVoiceCall);
}