随着移动端的流行,愈来愈的网站,除了提供PC网页以外,也提供了移动端的H5页面,手机在访问www.xxx.com的时候,能自动跳转到mobile.xxx.com。网上不少在实现时也能使用JS直接进行跳转,除了JS以外,你还能够使用MVC的后端代码直接实现后端
HttpContext.Current.Request.Browser.IsMobileDevice
在首页访问Controller代码最前面直接增长核心代码进行判断ide
public ActionResult Index() { if (IsMobile()) { return Redirect("mobile.xxx.com"); } return View(); } public static bool IsMobile() { if (System.Web.HttpContext.Current.Request.Browser.IsMobileDevice) return true; return false; }
继承AuthorizeAttribute,增长自定义Attribute网站
public class RedirectMobileDevicesToMobileAreaAttribute : AuthorizeAttribute { protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext) { RouteData rData = httpContext.Request.RequestContext.RouteData; //判断,若是是页面手工点击的【电脑版】,则不进行跳转 string customChange = (rData.Values["id"] ?? "").ToString(); if (!string.IsNullOrWhiteSpace(customChange)) { return true; } if (!httpContext.Session.IsNewSession) return true; if (!httpContext.Request.Browser.IsMobileDevice) return true; if (Regex.IsMatch(httpContext.Request.Url.PathAndQuery, "/Mobile($|/)")) return true; return false; } protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { var redirectionRouteValues = GetRedirectionRouteValues(filterContext.RequestContext); filterContext.Result = new RedirectToRouteResult(redirectionRouteValues); } protected virtual RouteValueDictionary GetRedirectionRouteValues(RequestContext requestContext) { return new RouteValueDictionary(new { area = "Mobile", controller = requestContext.RouteData.Values["controller"], action = requestContext.RouteData.Values["action"] }); } }
在须要跳转的地方增长spa
[RedirectMobileDevicesToMobileArea]
[RedirectMobileDevicesToMobileArea] public ActionResult Index() { //if (IsMobile()) //{ // return Redirect("mobile.xxx.com"); //} return View(); }