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); } }
protected override DeviceType GetDeviceType(HttpContext context) { return(DeviceNameDetector.GetDeviceType(context.Request.UserAgent)); }