public static ParameterCollection Parse(ITextParser reader) { if (reader == null) throw new ArgumentNullException("reader"); var parameters = new ParameterCollection(); while (!reader.EndOfFile) { string name = Uri.UnescapeDataString(reader.ReadToEnd("&=")); char current = reader.Current; reader.Consume(); switch (current) { case '&': parameters.Add(name, string.Empty); break; case '=': { string value = reader.ReadToEnd("&"); reader.Consume(); parameters.Add(name, Uri.UnescapeDataString(value)); } break; default: parameters.Add(name, string.Empty); break; } } return parameters; }
/// <summary> /// Parse a header /// </summary> /// <param name="name">Name of header.</param> /// <param name="reader">Reader containing value.</param> /// <returns>HTTP Header</returns> /// <exception cref="FormatException">Header value is not of the expected format.</exception> public IHeader Parse(string name, ITextParser reader) { //key: "value"; key: "value" var cookies = new HttpCookieCollection(); while (!reader.EndOfFile) { // read name string cookieName = reader.ReadToEnd("=;"); // cookie with value? if (reader.Current == '=') { reader.Consume(); reader.ConsumeWhiteSpaces(); // is value quoted or not? string value = reader.Current == '"' ? reader.ReadQuotedString() : reader.ReadToEnd(";"); cookies.Add(new HttpCookie(cookieName, value)); } //else // cookies.Add(new RequestCookie(cookieName, string.Empty)); // consume whitespaces and cookie separator reader.ConsumeWhiteSpaces(';'); } return new CookieHeader(cookies); }
public IHeader Parse(string name, ITextParser reader) { var header = new AuthorizationHeader(); reader.ConsumeWhiteSpaces(); header.Scheme = reader.ReadWord(); reader.ConsumeWhiteSpaces(); header.Data = reader.ReadToEnd(); return header; }
/// <summary> /// Parse a header /// </summary> /// <param name="name">Name of header.</param> /// <param name="reader">Reader containing value.</param> /// <returns>HTTP Header</returns> /// <exception cref="FormatException">Header value is not of the expected format.</exception> public IHeader Parse(string name, ITextParser reader) { string value = reader.ReadToEnd(); try { return new DateHeader(name, DateTime.Parse(value, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)); } catch (FormatException err) { throw new BadRequestException("'" + name + "' do not contain a valid date", err); } }
/// <summary> /// Parse a header /// </summary> /// <param name="name">Name of header.</param> /// <param name="reader">Reader containing value.</param> /// <returns>HTTP Header</returns> /// <exception cref="FormatException">Header value is not of the expected format.</exception> public IHeader Parse(string name, ITextParser reader) { string typeStr = reader.ReadToEnd(';'); ConnectionType type; try { type = (ConnectionType) Enum.Parse(typeof (ConnectionType), typeStr.Replace("-", string.Empty), true); } catch (ArgumentException err) { throw new FormatException("Unknown connection type '" + typeStr + "'.", err); } // got parameters if (reader.Current == ';') { HeaderParameterCollection parameters = HeaderParameterCollection.Parse(reader); return new ConnectionHeader(type, parameters); } return new ConnectionHeader(type); }