Пример #1
0
        public static string GetFileExtension(IorMediaTypeCategory mtc, string mt)
        {
            switch (mtc)
            {
            case IorMediaTypeCategory.Html: return("html");

            case IorMediaTypeCategory.Json: return("json");

            case IorMediaTypeCategory.Text: return("txt");

            case IorMediaTypeCategory.Xml: return("xml");

            case IorMediaTypeCategory.Application:
                var parts = mt.Split('/');
                return(parts[1]);

            default:
                switch (mt)
                {
                case "text/csv": return("csv");

                case "text/css": return("css");

                case "text/ecmascript":
                case "text/javascript":
                case "application/javascript":
                case "application/x-javascript":
                    return("js");

                default: return("");
                }
            }
        }
        public static string GetFileExtension(IorMediaTypeCategory mtc, string mt, Uri requestUri)
        {
            Func<string> getUriExtensionOrBlank = () => {
                if(Path.HasExtension(requestUri.AbsolutePath))
                    return Path.GetExtension(requestUri.AbsoluteUri).Substring(1);
                else
                    return "";
            };

            switch (mtc) {
                case IorMediaTypeCategory.Html: return "html";
                case IorMediaTypeCategory.Json: return "json";
                case IorMediaTypeCategory.Text: return "txt";
                case IorMediaTypeCategory.Xml: return "xml";
                case IorMediaTypeCategory.Application:
                    var parts = mt.Split('/');
                    if(parts[1] == "octet-stream")
                        return getUriExtensionOrBlank();
                    else
                        return parts[1];
                default:
                    switch(mt) {
                        case "text/csv": return "csv";
                        case "text/css": return "css";
                        case "text/ecmascript":
                        case "text/javascript":
                        case "application/javascript":
                        case "application/x-javascript":
                            return "js";
                        default:
                            return getUriExtensionOrBlank();
                    }
            }
        }
Пример #3
0
        public IorContentType(string contentType)
        {
            try {
                contentType = contentType.Split(',')[0]; //though illegal, we've seen comma separated content-types in the wild
                this.ct     = new ContentType(contentType);
            } catch {
                this.ct = new ContentType("application/octet-stream");
            }

            this.MediaType         = ct.MediaType.ToLower();
            this.MediaTypeCategory = GetMediaTypeCategory(this.MediaType);
        }
        public IorContentType(string contentType)
        {
            try {
                contentType = contentType.Split(',')[0]; //though illegal, we've seen comma separated content-types in the wild
                this.ct = new ContentType(contentType);
            } catch {
                this.ct = new ContentType("application/octet-stream");
            }

            this.MediaType = ct.MediaType.ToLower();
            this.MediaTypeCategory = GetMediaTypeCategory(this.MediaType);
        }
Пример #5
0
        public static string GetFileExtension(IorMediaTypeCategory mtc, string mt, Uri requestUri)
        {
            Func <string> getUriExtensionOrBlank = () => {
                if (Path.HasExtension(requestUri.AbsolutePath))
                {
                    return(Path.GetExtension(requestUri.AbsoluteUri).Substring(1));
                }
                else
                {
                    return("");
                }
            };

            switch (mtc)
            {
            case IorMediaTypeCategory.Html: return("html");

            case IorMediaTypeCategory.Json: return("json");

            case IorMediaTypeCategory.Text: return("txt");

            case IorMediaTypeCategory.Xml: return("xml");

            case IorMediaTypeCategory.Application:
                var parts = mt.Split('/');
                if (parts[1] == "octet-stream")
                {
                    return(getUriExtensionOrBlank());
                }
                else
                {
                    return(parts[1]);
                }

            default:
                switch (mt)
                {
                case "text/csv": return("csv");

                case "text/css": return("css");

                case "text/ecmascript":
                case "text/javascript":
                case "application/javascript":
                case "application/x-javascript":
                    return("js");

                default:
                    return(getUriExtensionOrBlank());
                }
            }
        }
Пример #6
0
        /// <summary>
        /// If contentType is an xml content type, then try to pretty print the rawContent. If that fails or otherwise, just return the rawContent
        /// </summary>
        public static string GetPrettyPrintedContent(IorMediaTypeCategory mtc, string content)
        {
            //see http://stackoverflow.com/a/2965701/236255 for list of xml content types (credit to http://stackoverflow.com/users/18936/bobince)
            try {
                switch (mtc)
                {
                case IorMediaTypeCategory.Xml: {
                    var doc = XDocument.Parse(content);
                    var xml = doc.ToString();
                    if (doc.Declaration != null)
                    {
                        return(doc.Declaration.ToString() + Environment.NewLine + xml);
                    }
                    else
                    {
                        return(xml);
                    }
                }

                case IorMediaTypeCategory.Javascript:     //some APIs incorrectly use e.g. text/javascript when actual content-type is JSON
                case IorMediaTypeCategory.Json: {
                    dynamic parsedJson = JsonConvert.DeserializeObject(content);

                    var jsonSerializer = new JsonSerializer();
                    var stringWriter   = new StringWriter(new StringBuilder(256), CultureInfo.InvariantCulture);
                    using (var jsonTextWriter = new JsonTextWriter(stringWriter)) {
                        jsonTextWriter.Indentation = 2;
                        jsonTextWriter.IndentChar  = ' ';
                        jsonTextWriter.Formatting  = Formatting.Indented;
                        jsonSerializer.Serialize(jsonTextWriter, parsedJson);
                    }
                    return(stringWriter.ToString());
                }

                case IorMediaTypeCategory.Html: {
                    //need to convert to utf16-little endian stream and set Document input/output encoding since Document.FromString screws up encoding.
                    var stream = new MemoryStream(Encoding.Unicode.GetBytes(content));
                    using (var doc = Document.FromStream(stream)) {
                        doc.InputCharacterEncoding  = EncodingType.Utf16LittleEndian;
                        doc.OutputCharacterEncoding = EncodingType.Utf16LittleEndian;
                        doc.ShowWarnings            = false;
                        doc.Quiet               = true;
                        doc.OutputXhtml         = false;
                        doc.OutputXml           = false;
                        doc.OutputHtml          = false;
                        doc.IndentBlockElements = AutoBool.Yes;
                        doc.IndentSpaces        = 2;
                        doc.IndentAttributes    = false;
                        //doc.IndentCdata = true;
                        doc.AddVerticalSpace   = true;
                        doc.AddTidyMetaElement = false;
                        doc.WrapAt             = 120;

                        doc.MergeDivs   = AutoBool.No;
                        doc.MergeSpans  = AutoBool.No;
                        doc.JoinStyles  = false;
                        doc.ForceOutput = true;
                        doc.CleanAndRepair();

                        string output = doc.Save();
                        return(output);
                    }
                }

                default:
                    return(content);
                }
            } catch {
                return(content);
            }
        }
        /// <summary>
        /// If contentType is an xml content type, then try to pretty print the rawContent. If that fails or otherwise, just return the rawContent
        /// </summary>
        public static string GetPrettyPrintedContent(IorMediaTypeCategory mtc, string content)
        {
            //see http://stackoverflow.com/a/2965701/236255 for list of xml content types (credit to http://stackoverflow.com/users/18936/bobince)
            try {
                switch (mtc) {
                    case IorMediaTypeCategory.Xml: {
                        var doc = XDocument.Parse(content);
                        var xml = doc.ToString();
                        if (doc.Declaration != null)
                            return doc.Declaration.ToString() + Environment.NewLine + xml;
                        else
                            return xml;
                    }
                    case IorMediaTypeCategory.Javascript: //some APIs incorrectly use e.g. text/javascript when actual content-type is JSON
                    case IorMediaTypeCategory.Json: {
                        dynamic parsedJson = JsonConvert.DeserializeObject(content);

                        var jsonSerializer = new JsonSerializer();
                        var stringWriter = new StringWriter(new StringBuilder(256), CultureInfo.InvariantCulture);
                        using (var jsonTextWriter = new JsonTextWriter(stringWriter)) {
                            jsonTextWriter.Indentation = 2;
                            jsonTextWriter.IndentChar = ' ';
                            jsonTextWriter.Formatting = Formatting.Indented;
                            jsonSerializer.Serialize(jsonTextWriter, parsedJson);
                        }
                        return stringWriter.ToString();
                    }
                    case IorMediaTypeCategory.Html: {
                        //need to convert to utf16-little endian stream and set Document input/output encoding since Document.FromString screws up encoding.
                        var stream = new MemoryStream(Encoding.Unicode.GetBytes(content));
                        using (var doc = Document.FromStream(stream)) {
                            doc.InputCharacterEncoding = EncodingType.Utf16LittleEndian;
                            doc.OutputCharacterEncoding = EncodingType.Utf16LittleEndian;
                            doc.ShowWarnings = false;
                            doc.Quiet = true;
                            doc.OutputXhtml = false;
                            doc.OutputXml = false;
                            doc.OutputHtml = false;
                            doc.IndentBlockElements = AutoBool.Yes;
                            doc.IndentSpaces = 2;
                            doc.IndentAttributes = false;
                            //doc.IndentCdata = true;
                            doc.AddVerticalSpace = true;
                            doc.AddTidyMetaElement = false;
                            doc.WrapAt = 120;

                            doc.MergeDivs = AutoBool.No;
                            doc.MergeSpans = AutoBool.No;
                            doc.JoinStyles = false;
                            doc.ForceOutput = true;
                            doc.CleanAndRepair();

                            string output = doc.Save();
                            return output;
                        }
                    }
                    default:
                        return content;
                }
            } catch (Exception ex) {
                log.Warn("Failed content conversion", ex);
                return content;
            }
        }