public static MimeType[] Parse(string acceptHeader, MimeTypes mimes) { string[] splitHeaders = acceptHeader.Split(','); List<AcceptType> acceptTypes = new List<AcceptType>(splitHeaders.Length); for(int i = 0; i < splitHeaders.Length; i++) { string[] parms = splitHeaders[i].Split(';'); AcceptType at = new AcceptType(); at.Name = parms[0]; at.Order = i; at.Q = parms.Length == 2 ? Convert.ToSingle(parms[1].Substring(2)) : 1; acceptTypes.Add(at); } AcceptType appXml = acceptTypes.Find(delegate(AcceptType at) { return at.Name == "application/xml"; }); if (appXml != null) { Regex regEx = new Regex(@"\+xml$"); int appXmlIndex; int idx = appXmlIndex = acceptTypes.IndexOf(appXml); while(idx < acceptTypes.Count) { AcceptType at = acceptTypes[idx]; if (at.Q < appXml.Q) { break; } if (regEx.IsMatch(at.Name)) { acceptTypes.Remove(at); acceptTypes.Insert(appXmlIndex, at); appXmlIndex++; } idx++; } } List<MimeType> returnTypes = new List<MimeType>(); acceptTypes.Sort(new Comparison<AcceptType>(descendingAcceptTypes)); foreach(AcceptType type in acceptTypes) { // returnTypes.AddRange(mimes.Where(m => m.MimeString == type.Name || m.Synonyms.Contains(type.Name))); returnTypes.AddRange(mimes.FindAll(delegate(MimeType m) { return m.MimeString == type.Name || m.Synonyms.Contains(type.Name); })); } //return returnTypes.Distinct().ToArray(); return returnTypes.ToArray(); }
private void DoResponse(string format, IControllerBridge bridge) { Responder hander = new Responder(bridge, bridge.ControllerAction); hander.Format = format; _renderers[format](hander); MimeTypes types = new MimeTypes(); types.RegisterBuiltinTypes(); // MimeType usedType = types.Where(mime => mime.Symbol == format).First(); MimeType usedType = types.FindAll(delegate(MimeType mime) { return mime.Symbol == format; })[0]; bridge.SetResponseType(usedType); }
private void DoResponse(string format, IControllerBridge bridge) { Responder hander = new Responder(bridge, bridge.ControllerAction); hander.Format = format; _renderers[format](hander); MimeTypes types = new MimeTypes(); types.RegisterBuiltinTypes(); // MimeType usedType = types.Where(mime => mime.Symbol == format).First(); MimeType usedType = types.FindAll(delegate(MimeType mime) { return(mime.Symbol == format); })[0]; bridge.SetResponseType(usedType); }