/// <summary> /// Build request uri from decoded uri and raw path. /// </summary> /// <param name="uri">Already decoded uri.</param> /// <param name="rawpath">Raw path string.</param> /// <returns>Properly encoded request uri.</returns> public static XUri FromHttpContextComponents(Uri uri, string rawpath) { // Note (arnec): RawUrl is only the path portion, lacking SchemeHostPort // but Url does path decoding, so we have to construct the url ourselves var parsed = new XUri(uri.GetLeftPart(UriPartial.Authority)); try { parsed = parsed.AtAbsolutePath(rawpath); } catch { // need to try to do an extra pass at encoding the uri, just in case rawpath = _encodingFixUpRegex.Replace(rawpath, m => String.Format("%{0}", StringUtil.HexStringFromBytes(Encoding.ASCII.GetBytes(m.Value)))); parsed = parsed.AtAbsolutePath(rawpath); } return parsed; }