私が達成しようとしているのは簡単です。 Webアプリケーションにあるすべてのビューのうち、モバイルバージョンを作成したかみそりビューは2つしかありません。ユーザーがモバイルデバイスからアプリケーションにアクセスしている場合、ユーザーをこれらのビューにリダイレクトする必要があります。私はコントローラレベルで次のことを試しましたが、異なるモバイルデバイスでテストを実行したときにユーザーをリダイレクトしませんでした:-
if (Request.Browser.IsMobileDevice)
{
return View("MobileStudentStartAssessment");
}
else {
return View("StudentStartAssessment");
}
それで、私が従うことができる別のアプローチがあり、それはほとんどのモバイルデバイスを検出できますか?ありがとう
モバイルビューが(デバイス固有のビューではなく)すべてのモバイルデバイスを対象としている場合、ユーザーエージェント文字列を調べて、どのビューを返す必要があるかを確認できます。これは一例にすぎませんが、次のように理解してください。
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
}
それでもモバイルブラウザが認識されない場合は、デバッガでユーザーエージェント文字列を調べて、使用できる識別子があるかどうかを確認してください。
nugetの51degrees.mobiパッケージ を使用します。これは、すべての異なるモバイルデバイスを検出する際により正確です。すぐに機能しました。
ブラウザがモバイルデバイスの場合、別のエリアにリダイレクトします。
また、このトピックについて Steve Sandersons blog を読むこともお勧めします。
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);
}
}
}
ここで入手できる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で働いています
この方法を使用して、モバイルとデスクトップを検出します
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
}