Ответ 1
Вы можете использовать свойство Request.Browser.IsMobileDevice
.
то, что я пытаюсь достичь, прост; Среди всего представления, которое у меня есть в моем веб-приложении, у меня есть только два вида бритвы, которые я создал для них мобильную версию. поэтому мне нужно перенаправить пользователей на эти представления, если они обращаются к приложению со своих мобильных устройств. я попробовал следующее на уровне контроллера, но он не перенаправлял пользователей, когда я запускал свой тест на разных мобильных устройствах: -
if (Request.Browser.IsMobileDevice)
{
return View("MobileStudentStartAssessment");
}
else {
return View("StudentStartAssessment");
}
Итак, есть ли другой подход, который я могу отслеживать, который может обнаружить большинство мобильных устройств? Благодаря
Вы можете использовать свойство Request.Browser.IsMobileDevice
.
Предполагая, что ваше мобильное представление предназначено для всех мобильных устройств (а не для конкретных устройств), вы можете проверить строку пользовательского агента, чтобы увидеть, какой вид вы должны вернуть. Это всего лишь пример, но вы должны получить довольно далеко:
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
}
Если вы по-прежнему не узнаете свой мобильный браузер, проверьте строку пользовательского агента в отладчике и посмотрите, есть ли там идентификатор.
Я использую 51degrees.mobi пакет из nuget. Это более точное определение всех мобильных устройств. Это сработало сразу.
Когда браузер является мобильным устройством, я перенаправляю его в другую область.
Я также рекомендую прочитать блог Стива Сандерсона по теме.
Использовать 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);
}
}
}
Я использую этот метод для обнаружения мобильных и рабочих столов
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");
}
Вы можете использовать
if (Request.Browser["IsMobileDevice"] == "true")
{
//Mobile Browser Detected
}
else
{
//Desktop Browser Detected
}
Используя 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="[&|\?]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