Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
    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);
    }