예제 #1
0
            /// <summary>
            /// Ctor
            /// </summary>
            /// <param name="writers">inject with all possible writers</param>
            public DataWriterProvider(IEnumerable <IDataWriter> writers)
            {
                if (writers != null)
                {
                    foreach (IDataWriter writer in writers)
                    {
                        if (this.DefaultWriter == null)
                        {
                            // TODO: decide less arbitrary way to choose default
                            // without hardcoding value into IDataWriter
                            this.DefaultWriter = writer;
                        }

                        if (!String.IsNullOrEmpty(writer.ContentType))
                        {
                            this.WritersByMime[writer.ContentType] = writer;
                        }

                        if (!String.IsNullOrEmpty(writer.ContentType))
                        {
                            string ext = DataWriterProvider.NormalizeExtension(writer.FileExtension);
                            this.WritersByExt[ext] = writer;
                        }
                    }
                }
            }
    public IDataReader Find(string contentTypeHeader)
    {
        string key = DataWriterProvider.ParseMediaType(contentTypeHeader);

        if (ReadersByMime.ContainsKey(key))
        {
            return(ReadersByMime[key]);
        }
        return(null);
    }
예제 #3
0
            /// <summary>
            /// Finds an IDataReader by content-type header
            /// </summary>
            /// <param name="contentTypeHeader"></param>
            /// <returns></returns>
            public IDataReader Find(string contentTypeHeader)
            {
                string type = DataWriterProvider.ParseMediaType(contentTypeHeader);

                if (this.ReadersByMime.ContainsKey(type))
                {
                    return(ReadersByMime[type]);
                }

                return(null);
            }
예제 #4
0
            /// <summary>
            ///
            /// </summary>
            /// <param name="type"></param>
            /// <returns></returns>
            public static string ParseMediaType(string type)
            {
                foreach (string mime in DataWriterProvider.SplitTrim(type, ';'))
                {
                    // only return first part
                    return(mime);
                }

                // if no parts then was empty
                return(String.Empty);
            }
예제 #5
0
            public IDataWriter Find(string extension)
            {
                extension = DataWriterProvider.NormalizeExtension(extension);

                if (this.WritersByExt.ContainsKey(extension))
                {
                    return(WritersByExt[extension]);
                }

                return(null);
            }
예제 #6
0
            public IDataWriter Find(string acceptHeader, string contentTypeHeader)
            {
                foreach (string type in DataWriterProvider.ParseHeaders(acceptHeader, contentTypeHeader))
                {
                    if (this.WritersByMime.ContainsKey(type))
                    {
                        return(WritersByMime[type]);
                    }
                }

                return(null);
            }
예제 #7
0
            /// <summary>
            /// Parses HTTP headers for Media-Types
            /// </summary>
            /// <param name="accept">HTTP Accept header</param>
            /// <param name="contentType">HTTP Content-Type header</param>
            /// <returns>sequence of Media-Types</returns>
            /// <remarks>
            /// http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
            /// </remarks>
            public static IEnumerable <string> ParseHeaders(string accept, string contentType)
            {
                string mime;

                // check for a matching accept type
                foreach (string type in DataWriterProvider.SplitTrim(accept, ','))
                {
                    mime = DataWriterProvider.ParseMediaType(type);
                    if (!String.IsNullOrEmpty(mime))
                    {
                        yield return(mime);
                    }
                }

                // fallback on content-type
                mime = DataWriterProvider.ParseMediaType(contentType);
                if (!String.IsNullOrEmpty(mime))
                {
                    yield return(mime);
                }
            }