2017-09-25 3 views
2

Ich habe zwei Funktion, dass man eine FormCollection empfängt und eine andere erhält eine HttpRequest wie folgt aus:Konvertieren Formcollection && Httprequest zu Hashtable

public void SetUrlParameters(FormCollection request, string controllerName = "") 
{ 
    string sessionID = ConvertToString(request["sessionID"]); 
    string idSession = ConvertToString(request["idSession"]); 
    string sessionid = ConvertToString(request["sessionid"]); 

    if (idSession.Length > 0) 
     this.sessionID = idSession; 
    else if (sessionid.Length > 0) 
     this.sessionID = sessionid; 
    else 
     this.sessionID = sessionID; 

} 

private void SetUrlParameters(HttpRequest request, string controllerName = "") 
{ 

    string sessionID = ConvertToString(request["sessionID"]); 
    string idSession = ConvertToString(request["idSession"]); 
    string sessionid = ConvertToString(request["sessionid"]); 

    if (idSession.Length > 0) 
     this.sessionID = idSession; 
    else if (sessionid.Length > 0) 
     this.sessionID = sessionid; 
    else 
     this.sessionID = sessionID; 

} 

private string ConvertToString(object obj, string defaultValue = "") 
{ 
     if (obj == null) return defaultValue; 

     return Convert.ToString(filterSameVariablesValue(obj)); 
} 

Wie Sie sehen können, die sowohl die Funktionen tun genau das gleiche. Der einzige Unterschied ist der Typ des Wertes, den jeder erhält.

Beide Funktionen funktionieren. Was ich will, ist zu vermeiden, in beiden Funktionen Code wiederholt zu haben.

Es gibt eine Möglichkeit, dass ich dies zusammenfassen kann, um in einem zu funktionieren? Wie zum Beispiel konvertieren Sie die FormCollection und in eine Hashtable und die verwenden?

+0

vermeiden, was haben Sie versucht? was hat nicht funktioniert? –

+0

@TheBeardedLlama Beide Funktionen funktionieren. Was ich will, ist zu vermeiden, wiederholten Code in beiden Funktionen. –

+0

Ich glaube nicht, dass Sie den 'HttpRequest' Indexer überhaupt verwenden sollten. Es greift auf die Abfragezeichenfolge, das Formular, die Cookies * und * Server-Variablen gleichzeitig zu, was Sie nie tun sollten. –

Antwort

2

Sie können einfach einen NameValueCollection Parameter erwarten, dass auf beiden Typen ein (fast) gemeinsam ist:

private void SetUrlParameters(NameValueCollection data, string controllerName = "") 
{ 
    string sessionID = ConvertToString(data["sessionID"]); 
    string idSession = ConvertToString(data["idSession"]); 
    string sessionid = ConvertToString(data["sessionid"]); 

    if (idSession.Length > 0) 
     this.sessionID = idSession; 
    else if (sessionid.Length > 0) 
     this.sessionID = sessionid; 
    else 
     this.sessionID = sessionID; 
} 

Verwendung für HttpRequest:

SetUrlParameters(request.Params); 

Verwendung für FormCollection:

SetUrlParameters(formCollection); 

Siehe MSDN

0

FormCollection erbt von NameValueCollection. HttpRequest hat Eigenschaft, die NameValueCollection auch ist. So können Sie Ihre Vervielfältigung mit convertion zu NameValueCollection

public void GetParameters(FormCollection form, HttpRequest request) 
{ 
    var parameters = Convert(form); 
    parameters = Convert(request.Parameters); 
} 

public YourParameters Convert(NameValueCollection form) 
{ 
    //your code here 
}