/// <summary> /// /// </summary> /// <param name="type"></param> /// <returns></returns> public static string ParseMediaType(string type) { foreach (string mime in DataProviderUtility.SplitTrim(type, ';')) { // only return first part return(mime); } // if no parts then was empty return(String.Empty); }
public virtual IDataWriter Find(string extension) { extension = DataProviderUtility.NormalizeExtension(extension); IDataWriter writer; if (this.WritersByExt.TryGetValue(extension, out writer)) { return(writer); } return(null); }
/// <summary> /// Finds an IDataReader by content-type header /// </summary> /// <param name="contentTypeHeader"></param> /// <returns></returns> public virtual IDataReader Find(string contentTypeHeader) { // TODO: implement this negotiation // http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-380003.8 string type = DataProviderUtility.ParseMediaType(contentTypeHeader); IDataReader reader; if (this.ReadersByMime.TryGetValue(type, out reader)) { return(reader); } return(null); }
public virtual IDataWriter Find(string acceptHeader, string contentTypeHeader) { // TODO: implement this negotiation // http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-380003.8 IDataWriter writer; foreach (string type in DataProviderUtility.ParseHeaders(acceptHeader, contentTypeHeader)) { if (this.WritersByMime.TryGetValue(type, out writer)) { return(writer); } } return(null); }
/// <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 DataProviderUtility.SplitTrim(accept, ',')) { mime = DataProviderUtility.ParseMediaType(type); if (!String.IsNullOrEmpty(mime)) { yield return(mime); } } // fallback on content-type mime = DataProviderUtility.ParseMediaType(contentType); if (!String.IsNullOrEmpty(mime)) { yield return(mime); } }
/// <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. // Currently first DataWriter wins default. this.DefaultWriter = writer; } foreach (string contentType in writer.ContentType) { if (String.IsNullOrEmpty(contentType) || this.WritersByMime.ContainsKey(contentType)) { continue; } this.WritersByMime[contentType] = writer; } foreach (string fileExt in writer.FileExtension) { if (String.IsNullOrEmpty(fileExt) || this.WritersByExt.ContainsKey(fileExt)) { continue; } string ext = DataProviderUtility.NormalizeExtension(fileExt); this.WritersByExt[ext] = writer; } } } }