Spotify.NET/SpotifyAPI.Web/Models/Request/RequestParams.cs

53 lines
1.4 KiB
C#
Raw Normal View History

2020-05-01 19:05:28 +01:00
using System.Reflection;
using System;
using System.Linq;
using System.Collections.Generic;
namespace SpotifyAPI.Web
{
public abstract class RequestParams
{
public Dictionary<string, string> BuildQueryParams()
{
// Make sure everything is okay before building query params
Ensure();
2020-05-02 13:58:11 +01:00
var queryProps = GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public)
2020-05-01 19:05:28 +01:00
.Where(prop => prop.GetCustomAttributes(typeof(QueryParamAttribute), true).Length > 0);
var queryParams = new Dictionary<string, string>();
foreach (var prop in queryProps)
{
var attribute = prop.GetCustomAttribute(typeof(QueryParamAttribute)) as QueryParamAttribute;
object value = prop.GetValue(this);
2020-05-01 19:05:28 +01:00
if (value != null)
{
queryParams.Add(attribute.Key ?? prop.Name, value.ToString());
}
}
AddCustomQueryParams(queryParams);
2020-05-01 19:05:28 +01:00
return queryParams;
}
protected virtual void Ensure() { }
protected virtual void AddCustomQueryParams(Dictionary<string, string> queryParams) { }
2020-05-01 19:05:28 +01:00
}
public class QueryParamAttribute : Attribute
{
2020-05-02 13:58:11 +01:00
public string Key { get; }
2020-05-01 19:05:28 +01:00
public QueryParamAttribute() { }
public QueryParamAttribute(string key)
{
Key = key;
}
}
public class BodyParamAttribute : Attribute
{
public BodyParamAttribute() { }
}
}