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();
            }

    附源代下载:点击访问

  • 相关阅读:
    中文排版CSS心得
    用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
    Linux 下忘记root密码怎么办
    CSS手册简编
    SC 命令
    DataGrid的数据导入到Excel或CSV
    asp中关于'+'的特殊处理
    卡巴斯基汇总收藏版
    一步一步学习BI(2)Integration Services简单ETL工程
    优化递归的效率zz
  • 原文地址:https://www.cnblogs.com/wangyong969/p/5238456.html
Copyright © 2011-2022 走看看