public override void WriteJson( JsonWriter writer, object value, JsonSerializer serializer) { IParsedUrl parsedUrl = (IParsedUrl)value; writer.WriteValue(_urlFormatter.Format(parsedUrl)); }
public string Format(IParsedUrl parsedUrl) { if (parsedUrl == null) { throw new ArgumentNullException(nameof(parsedUrl)); } if (!parsedUrl.IsValid) { return(null); } return(string.Format( "{0}://{1}{2}{3}", parsedUrl.Scheme, parsedUrl.Host, (parsedUrl.Scheme.ToLower().Equals("https") && parsedUrl.Port != 443) || (parsedUrl.Scheme.ToLower().Equals("http") && parsedUrl.Port != 80) ? string.Format(":{0}", parsedUrl.Port) : string.Empty, parsedUrl.PathAndQuery)); }
public string BuildRedirect(IParsedUrl newUrlParsed) { var redirectLines = new List <string>( new [] { $"<ReplaceKeyPrefixWith>{XmlEncode(FormatPathAndQuery(newUrlParsed.PathAndQuery))}</ReplaceKeyPrefixWith>", "<HttpRedirectCode>301</HttpRedirectCode>" } ); if (newUrlParsed.OriginalUrlHasHost) { redirectLines.AddRange( new [] { $"<Protocol>{newUrlParsed.Scheme}</Protocol>", $"<HostName>{newUrlParsed.Host}</HostName>", } ); } return(string.Join( Environment.NewLine, redirectLines)); }
public string BuildCondition(IParsedUrl oldUrlParsed) { return($"<KeyPrefixEquals>{FormatPathAndQuery(oldUrlParsed.Path)}</KeyPrefixEquals>{Environment.NewLine}"); }
public IParsedUrl Parse( string url, IParsedUrl defaultUrl, bool stripFragment = false) { if (url == null) { throw new ArgumentNullException(nameof(url)); } // remove whitespaces fro murl var urlFormatted = _formatUrlRegex.Replace( url, string.Empty); // match url scheme var urlSchemeMatch = _urlRegex.Match( urlFormatted); // return parsed url, if url matches http or https scheme if (urlSchemeMatch.Success) { var scheme = urlSchemeMatch.Groups[1].Value.ToLower(); if (!string.IsNullOrWhiteSpace(urlSchemeMatch.Groups[3].Value) && !_portRegex.IsMatch(urlSchemeMatch.Groups[3].Value)) { return(new ParsedUrl { OriginalUrl = url }); } var port = ParsePort( urlSchemeMatch.Groups[3].Value); if (port == 0) { port = scheme.ToLower().StartsWith("https") ? 443 : 80; } var pathAndQuery = FormatPathAndQuery( urlSchemeMatch.Groups[4].Value, stripFragment); var pathAndQueryParts = pathAndQuery.Split(new[] { '?' }); return(new ParsedUrl { Scheme = scheme, Host = urlSchemeMatch.Groups[2].Value, Port = port, Path = FormatPath( pathAndQueryParts.Length > 0 ? pathAndQueryParts[0] : pathAndQuery), Query = pathAndQueryParts.Length > 1 ? pathAndQueryParts[1] : string.Empty, OriginalUrl = urlFormatted, OriginalUrlHasHost = true }); } // return parsed url with default url, if it starts with '/' if (urlFormatted.StartsWith("/")) { if (defaultUrl == null || !defaultUrl.IsValid) { return(new ParsedUrl { OriginalUrl = url }); } var pathAndQuery = FormatPathAndQuery( urlFormatted, stripFragment); var pathAndQueryParts = pathAndQuery.Split(new[] { '?' }); return(new ParsedUrl { Scheme = defaultUrl.Scheme, Port = defaultUrl.Port, Host = defaultUrl.Host, Path = FormatPath( pathAndQueryParts.Length > 0 ? pathAndQueryParts[0] : pathAndQuery), Query = pathAndQueryParts.Length > 1 ? pathAndQueryParts[1] : string.Empty, OriginalUrl = urlFormatted }); } return(new ParsedUrl { OriginalUrl = url }); }