private string GetFileNameFromResponse(IHttpResponseMessageWrapper response, string url) { var contentDisposition = response.ContentDisposition(); string result; if (contentDisposition != null && contentDisposition.FileName != null) { var fileName = Path.GetFileName(contentDisposition.FileName); if (!Path.HasExtension(fileName)) { fileName += DefaultExtension; } result = fileName; } else { var uri = new Uri(url); if (uri.Segments.Any() && uri.Segments.Last() != "/") { var lastSegment = uri.Segments.Last(); if (!Path.HasExtension(lastSegment)) { lastSegment += DefaultExtension; } result = lastSegment; } else { var parts = uri.Host.Split('.'); // There's no segment, use the domain name. string domain; switch (parts.Length) { case 1: case 2: // It's localhost if 1, no www if 2 domain = parts.First(); break; case 3: domain = parts[1]; break; default: throw new NotImplementedException("We don't handle the case that the Host has more than three segments"); } result = domain + DefaultExtension; } } return(result); }
private static string GetFileNameFromResponse(IHttpResponseMessageWrapper response, string url) { var contentDisposition = response.ContentDisposition(); string result; if (contentDisposition != null && contentDisposition.FileName != null) { var fileName = Path.GetFileName(contentDisposition.FileName); if (!Path.HasExtension(fileName)) { fileName += DefaultExtension; } result = fileName; } else { var uri = new Uri(url); if (uri.Segments.Any() && uri.Segments.Last() != "/") { var lastSegment = uri.Segments.Last(); if (!Path.HasExtension(lastSegment)) { lastSegment += DefaultExtension; } result = lastSegment; } else { var parts = uri.Host.Split('.'); var domain = parts.Length switch { 1 or 2 => parts.First(), // It's localhost or somewhere in an Intranet if 1; no www if 2. 3 => parts[1], // Grab XYZ in www.XYZ.domain.com or similar. _ => throw new NotImplementedException("We don't handle the case that the Host has more than three segments"), }; result = domain + DefaultExtension; } } return(result); }