You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.5 KiB
36 lines
1.5 KiB
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.md in the project root for license information.
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using Microsoft.AspNet.SignalR.Infrastructure;
|
|
|
|
namespace Microsoft.AspNet.SignalR.Owin.Infrastructure
|
|
{
|
|
[SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "It is instantiated in the static Parse method")]
|
|
internal sealed class ParamDictionary
|
|
{
|
|
private static readonly char[] DefaultParamSeparators = new[] { '&', ';' };
|
|
private static readonly char[] ParamKeyValueSeparator = new[] { '=' };
|
|
private static readonly char[] LeadingWhitespaceChars = new[] { ' ' };
|
|
|
|
internal static IEnumerable<KeyValuePair<string, string>> ParseToEnumerable(string value, char[] delimiters = null)
|
|
{
|
|
value = value ?? String.Empty;
|
|
delimiters = delimiters ?? DefaultParamSeparators;
|
|
|
|
var items = value.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
|
|
|
|
foreach (var item in items)
|
|
{
|
|
string[] pair = item.Split(ParamKeyValueSeparator, 2, StringSplitOptions.None);
|
|
|
|
string pairKey = UrlDecoder.UrlDecode(pair[0]).TrimStart(LeadingWhitespaceChars);
|
|
string pairValue = pair.Length < 2 ? String.Empty : UrlDecoder.UrlDecode(pair[1]);
|
|
|
|
yield return new KeyValuePair<string, string>(pairKey, pairValue);
|
|
}
|
|
}
|
|
}
|
|
}
|