Skip to content

Commit

Permalink
release 2.1.404
Browse files Browse the repository at this point in the history
  • Loading branch information
huangxiangyao committed Oct 7, 2018
1 parent d68f677 commit 20bc83e
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 75 deletions.
4 changes: 2 additions & 2 deletions src/AspNetCore.ViewDivert/AspNetCore.ViewDivert.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
<PackageId>AspNetCore.ViewDivert</PackageId>
<VersionPrefix>2.0.1</VersionPrefix>
<Authors>AspNetCore</Authors>
<Description>A Razor ViewLocationExpander to serve different browsers with different views.</Description>
<Description>Razor ViewLocationExpander to serve different views for different browsers.</Description>
<PackageProjectUrl>https://github.com/myvas/AspNetCore.ViewDivert</PackageProjectUrl>
<Version>2.1.403</Version>
<Version>2.1.404</Version>
<PackageTags>AspNetCore, ViewDivert</PackageTags>
</PropertyGroup>

Expand Down
142 changes: 69 additions & 73 deletions src/AspNetCore.ViewDivert/Resolvers/AgentResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,102 +15,100 @@ public AgentResolver(IOptions<ViewDivertOptions> optionsAccessor)
{
_options = optionsAccessor?.Value ?? throw new ArgumentNullException(nameof(optionsAccessor));
}

/// <summary>
/// 判断设备类别
/// </summary>
/// <param name="context"></param>
/// <returns>未知设备类别则返回<see cref="string.Empty"/> 。</returns>
public string Resolve(HttpContext context)
{
if(AgentResolverHelper.IsMicroMessenger(context))
if (IsMicroMessenger(context))
return _options.WeixinCode;

if(AgentResolverHelper.IsTablet(context))
return _options.TabletCode;
if(AgentResolverHelper.IsMobile(context))
if (IsTablet(context))
return _options.TabletCode;

if (IsMobile(context))
return _options.MobileCode;

return "";
}

internal static class AgentResolverHelper
public static bool IsMicroMessenger(HttpContext context)
{
public static bool IsMicroMessenger(HttpContext context)
try
{
try
var agent = context.Request.Headers["User-Agent"].FirstOrDefault()?.ToLowerInvariant();
// UserAgent keyword detection of MicroMessenger
if (agent != null && KnownMicroMessengerUserAgentKeywords.Any(keyword => agent.Contains(keyword)))
{
var agent = context.Request.Headers["User-Agent"].FirstOrDefault()?.ToLowerInvariant();
// UserAgent keyword detection of MicroMessenger
if (agent != null && KnownMicroMessengerUserAgentKeywords.Any(keyword => agent.Contains(keyword)))
{
return true;
}
return true;
}
catch { }
return false;
}
catch { }
return false;
}

public static bool IsTablet(HttpContext context)
public static bool IsTablet(HttpContext context)
{
try
{
try
var agent = context.Request.Headers["User-Agent"].FirstOrDefault()?.ToLowerInvariant();
// UserAgent keyword detection of:
// (1) Tablet && !mobile
// (2) ipad
if (agent != null && KnownTabletUserAgentKeywords.Any(keyword => agent.Contains(keyword) && !agent.Contains("mobile")
|| (agent != null && agent.Contains("ipad"))))
{
var agent = context.Request.Headers["User-Agent"].FirstOrDefault()?.ToLowerInvariant();
// UserAgent keyword detection of:
// (1) Tablet && !mobile
// (2) ipad
if (agent != null && KnownTabletUserAgentKeywords.Any(keyword => agent.Contains(keyword) && !agent.Contains("mobile")
|| (agent != null && agent.Contains("ipad"))))
{
return true;
}
return true;
}
catch { }
return false;
}
catch { }
return false;
}

public static bool IsMobile(HttpContext context)
public static bool IsMobile(HttpContext context)
{
try
{
try
var agent = context.Request.Headers["User-Agent"].FirstOrDefault()?.ToLowerInvariant();
// UserAgent keyword detection of:
// (1) x-wap-profile
// (2) profile
if (agent != null && context.Request.Headers.ContainsKey("x-wap-profile") ||
context.Request.Headers.ContainsKey("Profile"))
{
var agent = context.Request.Headers["User-Agent"].FirstOrDefault()?.ToLowerInvariant();
// UserAgent keyword detection of:
// (1) x-wap-profile
// (2) profile
if (agent != null && context.Request.Headers.ContainsKey("x-wap-profile") ||
context.Request.Headers.ContainsKey("Profile"))
{
return true;
}

if (agent != null && agent.Length >= 4 && KnownMobileUserAgentPrefixes.Any(prefix => agent.StartsWith(prefix)))
{
return true;
}

var accept = context.Request.Headers["Accept"];
if (accept.Any(t => t.ToLowerInvariant() == "wap"))
{
return true;
}

if (agent != null && KnownMobileUserAgentKeywords.Any(keyword => agent.Contains(keyword)))
{
return true;
}

if (context.Request.Headers.Any(header => header.Value.Any(value => value.Contains("OperaMini"))))
{
return true;
}
return true;
}

if (agent != null && agent.Length >= 4 && KnownMobileUserAgentPrefixes.Any(prefix => agent.StartsWith(prefix)))
{
return true;
}

var accept = context.Request.Headers["Accept"];
if (accept.Any(t => t.ToLowerInvariant() == "wap"))
{
return true;
}

if (agent != null && KnownMobileUserAgentKeywords.Any(keyword => agent.Contains(keyword)))
{
return true;
}

if (context.Request.Headers.Any(header => header.Value.Any(value => value.Contains("OperaMini"))))
{
return true;
}
catch { }
return false;
}
catch { }
return false;
}

public static readonly string[] KnownMobileUserAgentPrefixes =
{
public static readonly string[] KnownMobileUserAgentPrefixes =
{
"w3c ", "w3c-", "acs-", "alav", "alca", "amoi", "audi", "avan", "benq",
"bird", "blac", "blaz", "brew", "cell", "cldc", "cmd-", "dang", "doco",
"eric", "hipt", "htc_", "inno", "ipaq", "ipod", "jigs", "kddi", "keji",
Expand All @@ -122,18 +120,16 @@ public static bool IsMobile(HttpContext context)
"tosh", "tsm-", "upg1", "upsi", "vk-v", "voda", "wap-", "wapa", "wapi",
"wapp", "wapr", "webc", "winw", "winw", "xda ", "xda-"
};
public static readonly string[] KnownMobileUserAgentKeywords =
{
public static readonly string[] KnownMobileUserAgentKeywords =
{
"blackberry", "webos", "ipod", "lge vx", "midp", "maemo", "mmp", "mobile",
"netfront", "hiptop", "nintendo DS", "novarra", "openweb", "opera mobi",
"opera mini", "palm", "psp", "phone", "smartphone", "symbian", "up.browser",
"up.link", "wap", "windows ce"
};

public static readonly string[] KnownTabletUserAgentKeywords = { "ipad", "playbook", "hp-tablet", "kindle" };

public static readonly string[] KnownMicroMessengerUserAgentKeywords = { "micromessenger" };
}
}
public static readonly string[] KnownTabletUserAgentKeywords = { "ipad", "playbook", "hp-tablet", "kindle" };

public static readonly string[] KnownMicroMessengerUserAgentKeywords = { "micromessenger" };
}
}

0 comments on commit 20bc83e

Please sign in to comment.