예제 #1
0
        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();
        }
예제 #2
0
		public static MimeType[] Parse(string acceptHeader, MimeTypes mimes)
		{
			
			var splitHeaders = acceptHeader.Split(',');
			var acceptTypes = new List<AcceptType>(splitHeaders.Length);

			for (int i = 0; i < splitHeaders.Length; i++)
			{
				var parms = splitHeaders[i].Split(';');
				AcceptType at = new AcceptType();
				at.Name = parms[0].Trim();
				at.Order = i;

				at.Q = parms.Length == 2 ? Convert.ToSingle(parms[1].Substring(2)) : 1;
				acceptTypes.Add(at);
			}

			var appXml = acceptTypes.Find(at => at.Name == "application/xml");
			if (appXml != null)
			{
				var regEx = new System.Text.RegularExpressions.Regex(@"\+xml$");

				int appXmlIndex;
				int idx = appXmlIndex = acceptTypes.IndexOf(appXml);

				while (idx < acceptTypes.Count)
				{
					var at = acceptTypes[idx];
					if (at.Q < appXml.Q)
					{
						break;
					}
					
					if(regEx.IsMatch(at.Name)) {
						acceptTypes.Remove(at);
						acceptTypes.Insert(appXmlIndex,at);
						appXmlIndex++;
					}
					idx++;
				}                
			}
																										
			var returnTypes = new List<MimeType>();
			foreach (var type in acceptTypes.OrderByDescending(at => at.Q))
			{
				returnTypes.AddRange(mimes.Where(m => m.MimeString == type.Name || m.Synonyms.Contains(type.Name)));                
			}


			return returnTypes.Distinct().ToArray();
		}
예제 #3
0
        private static int descendingAcceptTypes(AcceptType x, AcceptType y)
        {
            return(Comparer <float> .Default.Compare(x.Q, y.Q));

//
//            if (x == null)
//            {
//                return (y == null ? 0 : -1);
//            }
//            else
//            {
//                if (y == null)
//                {
//                    return 1;
//                }
//                return x.Q.CompareTo(y.Q);
//            }
        }
예제 #4
0
        private static int descendingAcceptTypes(AcceptType x, AcceptType y)
        {
        	return Comparer<float>.Default.Compare(x.Q, y.Q);
//
//            if (x == null)
//            {
//                return (y == null ? 0 : -1);
//            }
//            else
//            {
//                if (y == null)
//                {
//                    return 1;
//                }
//                return x.Q.CompareTo(y.Q);
//            }
        }