2016-06-19 6 views
-1

辞書の値を扱うには2つの方法があります。メソッドがPOSTの場合は、statusのパラメータを辞書に追加するだけです。他のパラメータは同じです。SortedDictionaryでコードを重複しないようにするC#

var stringBuilder = new StringBuilder();      
var dictionary = new SortedDictionary<string, string>(); 
if (method == "GET") 
{ 
    stringBuilder.Append("GET&"); 
    stringBuilder.Append(Uri.EscapeDataString(url)); 
    stringBuilder.Append("&"); 
    dictionary = new SortedDictionary<string, string> 
    { 
     { "oauth_version" , oauthVersion }, 
     { "oauth_consumer_key", consumerKey }, 
     { "oauth_nonce" , oauthNonce }, 
     { "oauth_signature_method" , oauthSignatureMethod }, 
     { "oauth_timestamp" , oauthTimeStamp }, 
     { "oauth_token" , accessToken }, 
    }; 
} 

if (method == "POST") 
{ 
    stringBuilder.AppendFormat("POST&{0}&", Uri.EscapeDataString(url)); 
    dictionary = new SortedDictionary<string, string> 
    { 
     { "oauth_version" , oauthVersion }, 
     { "oauth_consumer_key", consumerKey }, 
     { "oauth_nonce" , oauthNonce }, 
     { "oauth_signature_method" , oauthSignatureMethod }, 
     { "oauth_timestamp" , oauthTimeStamp }, 
     { "oauth_token" , accessToken }, 
     { "status" , status } 
    }; 
} 

私のコードに重複を避けるためにとにかにありますか?何か提案は便利でしょう。

こんにちは。

+0

_ "duplicate" _はどういう意味ですか?辞書のキーまでは重複はありません。私は、あなたの質問を理解するのが難しいと思っています。あなたはそれを複製することを望んでいません。 –

+0

@VisualVincent私が意味することは、メソッドがPOSTの場合です。取得したメソッドとメソッドのparams.Allパラメータは同じです。 –

答えて

3

StringBuilderインスタンス変数と作成している辞書との間の関係はあまりありませんので、辞書コードの重複を前提にして、if条件から取り除くことができます。だから、基本的にこのコードは、あなたの質問に示すようにstringBuilderdictionaryインスタンス変数の両方が期待値を持つことになります実行した後

var stringBuilder = new StringBuilder(); 
stringBuilder.AppendFormat("{0}&{1}&", method, Uri.EscapeDataString(url)); 

var dictionary = new SortedDictionary<string, string> 
{ 
    { "oauth_version", oauthVersion }, 
    { "oauth_consumer_key", consumerKey }, 
    { "oauth_nonce", oauthNonce }, 
    { "oauth_signature_method", oauthSignatureMethod }, 
    { "oauth_timestamp", oauthTimeStamp }, 
    { "oauth_token", accessToken }, 
}; 

if (method == "POST") 
{ 
    // Only add the status parameter if the method is POST 
    dictionary["status"] = status; 
} 

:そのようなStringBuilderインスタンスを残り。

このように、辞書にはクエリ文字列のパラメータ値が含まれているかのように見えます。この場合、HTTPプロトコルを使用してそれらの値を正しく送信する前に、それらの値を適切にURLでエンコードすることが望ましいでしょう。

var dictionary = new SortedDictionary<string, string> 
{ 
    { "oauth_version", Uri.EscapeDataString(oauthVersion) }, 
    { "oauth_consumer_key", Uri.EscapeDataString(consumerKey) }, 
    { "oauth_nonce", Uri.EscapeDataString(oauthNonce) }, 
    { "oauth_signature_method", Uri.EscapeDataString(oauthSignatureMethod) }, 
    { "oauth_timestamp", Uri.EscapeDataString(oauthTimeStamp) }, 
    { "oauth_token", Uri.EscapeDataString(accessToken) }, 
}; 

if (method == "POST") 
{ 
    // Only add the status parameter if the method is POST 
    dictionary["status"] = Uri.EscapeDataString(status); 
} 
+0

こんにちはDarinさん、こんにちは。私は、postメソッドが、{"status"、status}をdictionaryに追加しています.Getメソッドは{"status"、status}を持っていません。 –

+0

OK、どのようにこれを達成できるか。メソッドの値がPOSTの場合は、辞書に「status」パラメータを追加するだけです。 –

+0

こんにちはダーリン、助けてくれてありがとう。私はこれについて考えなかったのですが –

関連する問題