public static Uri Create(Uri packageUri, Uri partUri, string fragment) { Check.PackageUri(packageUri); Check.PackageUriIsValid(packageUri); if (partUri != null) { Check.PartUriIsValid(partUri); } if (fragment != null && (fragment.Length == 0 || fragment[0] != '#')) { throw new ArgumentException("Fragment", "Fragment must not be empty and must start with '#'"); } // FIXME: Validate that partUri is a valid one? Must be relative, must start with '/' // First replace the slashes, then escape the special characters string orig = packageUri.OriginalString.Replace('/', ','); if (partUri != null) { orig += partUri.OriginalString; } // if (sb[sb.Length - 1] != '/') // sb.Append ('/'); if (fragment != null) { orig += fragment; } return(new Uri("pack://" + orig)); }
public static Uri Create(Uri packageUri, Uri partUri, string fragment) { Check.PackageUri(packageUri); Check.PackageUriIsValid(packageUri); if (partUri != null) { Check.PartUriIsValid(partUri); } if (fragment != null && (fragment.Length == 0 || fragment[0] != '#')) { throw new ArgumentException("Fragment", "Fragment must not be empty and must start with '#'"); } // FIXME: Validate that partUri is a valid one? Must be relative, must start with '/' // First replace the slashes, then escape the special characters //string orig = packageUri.GetComponents(UriComponents.AbsoluteUri, UriFormat.UriEscaped); string orig = packageUri.OriginalString; foreach (var ch in _escapedChars) { orig = !orig.Contains(ch.ToString()) ? orig : orig.Replace(ch.ToString(), Uri.HexEscape(ch)); } orig = orig.Replace('/', ','); if (partUri != null) { orig += partUri.OriginalString; } if ((fragment == null && partUri == null) && orig[orig.Length - 1] != '/') { orig += '/'; } if (fragment != null) { orig += fragment; } return(new Uri("pack://" + orig)); }