/// <summary> /// Full path to the recording file /// </summary> /// <param name="request"></param> /// <param name="resource"></param> /// <param name="session"></param> /// <returns></returns> public static string RecordingFullPath(IShippingApiRequest request, string resource, ISession session) { #pragma warning disable CS0618 var dirname = session.RecordPath; #pragma warning restore CS0618 var uriBuilder = new StringBuilder(resource); ShippingApiRequest.SubstitueResourceParameters(request, uriBuilder); var pathBuilder = new StringBuilder("/"); var uriComponents = uriBuilder.ToString().Split('/'); for (int i = 1; i < Math.Min(3, uriComponents.Length); i++) { pathBuilder.Append(uriComponents[i]); pathBuilder.Append(Path.DirectorySeparatorChar); } var fileNameBuilder = new StringBuilder(); for (int i = 3; i < uriComponents.Length; i++) { fileNameBuilder.Append(uriComponents[i]); fileNameBuilder.Append('_'); } var s = fileNameBuilder.ToString().ToLower(); string fileName = ""; if (s.Length > 0) { fileName = s.Substring(0, s.Length - 1) .Replace('?', '-') .Replace('&', '-') .Replace('=', '.'); } // At this point // dirname is base directory // pathBuilder.ToString() is the relative path based on 2 levels of uri path // fileName is the name built from the remaining uri path and any parameters return(dirname + pathBuilder.ToString() + fileName + request.RecordingSuffix + ".txt"); }