zoukankan      html  css  js  c++  java
  • .Net MVC中访问PC网页时,自动切换到移动端对应页面

           随着移动端的流行,越来越的网站,除了提供PC网页之外,也提供了移动端的H5页面,手机在访问www.xxx.com的时候,能自动跳转到mobile.xxx.com。网上很多在实现时也能使用JS直接进行跳转,除了JS之外,你还可以使用MVC的后端代码直接实现

    一、核心代码

    HttpContext.Current.Request.Browser.IsMobileDevice

     

    二、如何使用 ?

      方法一:

         在首页访问Controller代码最前面直接增加核心代码进行判断

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

    在需要跳转的地方增加

    [RedirectMobileDevicesToMobileArea]
    [RedirectMobileDevicesToMobileArea]
    public ActionResult Index()
            {
                //if (IsMobile())
                //{
                //    return Redirect("mobile.xxx.com");
                //}
                return View();
            }

    附源代下载:点击访问

  • 相关阅读:
    学习笔记180—回归系数与相关系数的关系和区别
    学习笔记178—精品书籍推荐榜
    学习笔记177—PPT生成的图片设置成特定像素级的图片【四种方法】
    学习笔记176—PS 获得一个椭圆的某个部分
    shell:利用sed删除文件中的匹配行
    常用壁纸
    Linux下编译C文件:Hello World
    属性访问、特性和修饰符
    介绍Python基本特殊方法
    kafka配置
  • 原文地址:https://www.cnblogs.com/wangyong969/p/5238456.html
Copyright © 2011-2022 走看看