public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var request = filterContext.HttpContext.Request;

            if (request.IsAjaxRequest() ||
                request.ByApp() ||
                string.IsNullOrWhiteSpace(request.UserAgent) ||
                request.UserAgent.IndexOf(BAIDU_SPIDER_KEYWORD, StringComparison.OrdinalIgnoreCase) > -1 ||
                !string.IsNullOrWhiteSpace(request.Headers[DISABLE_PC_MOBILE_REDIRECT]) ||
                request.RawUrl.IndexOf("/weixin/", StringComparison.InvariantCultureIgnoreCase) >= 0 ||
                request.RawUrl.IndexOf("/weibo/", StringComparison.InvariantCultureIgnoreCase) >= 0
                )
            {
                return;
            }

            // redirects between PC and mobile
            string     url        = request.Url.GetAbsoluteUri().ToLowerInvariant();
            DeviceType deviceType = DeviceNameDetector.GetDeviceType(request.UserAgent);

            if (deviceType == DeviceType.Mobile && !url.StartsWith(s_MobileSiteBaseUrl, StringComparison.InvariantCultureIgnoreCase))
            {
                string redirectUrl = CombineUrls(s_MobileSiteBaseUrl, ResolveNewLocalPathForRedirect(request));
                filterContext.Result = new RedirectResult(redirectUrl);
            }
            else if (deviceType != DeviceType.Mobile && !url.StartsWith(s_MainSiteBaseUrl, StringComparison.InvariantCultureIgnoreCase))
            {
                string redirectUrl = CombineUrls(s_MainSiteBaseUrl, ResolveNewLocalPathForRedirect(request));
                filterContext.Result = new RedirectResult(redirectUrl);
            }
        }
예제 #2
0
 protected override DeviceType GetDeviceType(HttpContext context)
 {
     return(DeviceNameDetector.GetDeviceType(context.Request.UserAgent));
 }