public static RequestAttributes GetAttributes(this IRequest request) { if (HostContext.DebugMode && request.QueryString != null) //Mock<IHttpRequest> { var simulate = request.QueryString["simulate"]; if (simulate != null) { return(ToRequestAttributes(simulate.Split(','))); } } var portRestrictions = RequestAttributes.None; portRestrictions |= ContentFormat.GetRequestAttribute(request.Verb); portRestrictions |= request.IsSecureConnection ? RequestAttributes.Secure : RequestAttributes.InSecure; if (request.UserHostAddress != null) { var isIpv4Address = request.UserHostAddress.IndexOf('.') != -1 && request.UserHostAddress.IndexOf("::", StringComparison.InvariantCulture) == -1; string ipAddressNumber = null; if (isIpv4Address) { ipAddressNumber = request.UserHostAddress.SplitOnFirst(":")[0]; } else { if (request.UserHostAddress.Contains("]:")) { ipAddressNumber = request.UserHostAddress.SplitOnLast(":")[0]; } else { ipAddressNumber = request.UserHostAddress.LastIndexOf("%", StringComparison.InvariantCulture) > 0 ? request.UserHostAddress.SplitOnLast(":")[0] : request.UserHostAddress; } } try { ipAddressNumber = ipAddressNumber.SplitOnFirst(',')[0]; var ipAddress = ipAddressNumber.StartsWith("::1") ? IPAddress.IPv6Loopback : IPAddress.Parse(ipAddressNumber); portRestrictions |= GetAttributes(ipAddress); } catch (Exception ex) { throw new ArgumentException("Could not parse Ipv{0} Address: {1} / {2}" .Fmt((isIpv4Address ? 4 : 6), request.UserHostAddress, ipAddressNumber), ex); } } return(portRestrictions); }