ジェネリックパラメータオブジェクトを取り込むこのメソッドを作成しました。このメソッドは、さまざまなプロパティを持つさまざまなパラメータオブジェクトを受け入れます。「MethodName」プロパティの値に基づいて、その特定のパラメータオブジェクトのプロパティに基づいてURIを構築できるという考え方です。
リフレクションを使用して、「MethodName」という名前のプロパティの値を取得します。これはメソッドではなく、単なるプロパティ名です。
ケースステートメントでMethodNameプロパティの値を使用します。これは私の仕事を達成するための劣った方法のようです。特にMethodNamesの数が増えるにつれて。
以下は、caseステートメントを実装したソースです。どんな助けでもいただければ幸いです。
public string ConstructBBAPIUri<T>(T parameters)
{
var methodName = "";
var uri = "";
var userId = "";
long timeStamp = 0;
var signature = "";
var sessionKey = "";
var newUserId = "";
if (parameters != null)
{
methodName = parameters.GetType().GetProperty("MethodName").GetValue(parameters, null).ToString();
switch (methodName)
{
case "user.login":
userId = parameters.GetType().GetProperty("UserId").GetValue(parameters, null).ToString();
timeStamp = Convert.ToInt64(parameters.GetType().GetProperty("TimeStamp").GetValue(parameters, null));
signature = GenerateBunchBallSignature(userId);
uri = "method=" + methodName + "&apiKey=" + apiKey + "&userid=" + userId + "&ts=" +
timeStamp + "&sig=" + signature;
break;
case "user.modifyUserId":
//We shouldn't need the session key if user.login is being called first
userId = parameters.GetType().GetProperty("UserId").GetValue(parameters, null).ToString();
newUserId = parameters.GetType().GetProperty("NewUserId").GetValue(parameters, null).ToString();
uri = "method=" + methodName + "&sessionKey=" + sessionKey + "&oldUserId=" + userId +
"&newUserId=" + newUserId;
break;
}
}
return uri;
}