Skip to content

Instantly share code, notes, and snippets.

@pthalamy
Forked from randyburden/OwinRequestExtensions.cs
Last active April 6, 2017 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pthalamy/2c085bd387828d39355e0251762c7ab5 to your computer and use it in GitHub Desktop.
Save pthalamy/2c085bd387828d39355e0251762c7ab5 to your computer and use it in GitHub Desktop.
OwinRequest extensions for getting query string, form body, and header parameters as Dictionary<string,string>
/// <summary>
/// Owin Request extensions.
/// <see href="https://gist.github.com/randyburden/42bc688780564ed01107"> Original Gist </see>
/// </summary>
public static class OwinRequestExtensions
{
/// <summary>
/// Gets the combined request parameters from the form body, query string, and request headers.
/// </summary>
/// <param name="request">Owin request.</param>
/// <returns>Dictionary of combined form body, query string, and request headers.</returns>
public static Dictionary<string, string> GetRequestParameters(this IOwinRequest request)
{
List<Dictionary<string, string>> dictionaries = new List<Dictionary<string, string>>();
dictionaries.Add(request.GetBodyParameters());
dictionaries.Add(request.GetQueryParameters());
dictionaries.Add(request.GetHeaderParameters());
/// <see href="http://stackoverflow.com/a/294145/3582770"> Merge dictionaries, duplicate keys are forbidden </see>
var allParameters = dictionaries.SelectMany(dict => dict)
.ToDictionary(pair => pair.Key, pair => pair.Value);
return allParameters;
}
/// <summary>
/// Gets the query string request parameters.
/// </summary>
/// <param name="request">Owin Request.</param>
/// <returns>Dictionary of query string parameters.</returns>
public static Dictionary<string, string> GetQueryParameters(this IOwinRequest request)
{
var dictionary = new Dictionary<string, string>(StringComparer.CurrentCultureIgnoreCase);
foreach (var pair in request.Query)
{
var value = GetJoinedValue(pair.Value);
dictionary.Add(pair.Key, value);
}
return dictionary;
}
/// <summary>
/// Gets the form body request parameters.
/// </summary>
/// <param name="request">Owin Request.</param>
/// <returns>Dictionary of form body parameters.</returns>
public static Dictionary<string, string> GetBodyParameters(this IOwinRequest request)
{
var dictionary = new Dictionary<string, string>(StringComparer.CurrentCultureIgnoreCase);
var formCollectionTask = request.ReadFormAsync();
formCollectionTask.Wait();
foreach (var pair in formCollectionTask.Result)
{
var value = GetJoinedValue(pair.Value);
dictionary.Add(pair.Key, value);
}
return dictionary;
}
/// <summary>
/// Gets the header request parameters.
/// </summary>
/// <param name="request">Owin Request.</param>
/// <returns>Dictionary of header parameters.</returns>
public static Dictionary<string, string> GetHeaderParameters(this IOwinRequest request)
{
var dictionary = new Dictionary<string, string>(StringComparer.CurrentCultureIgnoreCase);
foreach (var pair in request.Headers)
{
var value = GetJoinedValue(pair.Value);
dictionary.Add(pair.Key, value);
}
return dictionary;
}
private static string GetJoinedValue(string[] value)
{
if (value != null)
return string.Join(",", value);
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment