2012-12-21 7 views
36

Hier kann ich eine dieser beiden Methoden verwenden. Was sind die Unterschiede und welche sollte ich verwenden?Was ist der Unterschied zwischen Request.UserHostAddress und Request.ServerVariables ["REMOTE_ADDR"]. ToString()

Methode 1:

string srUserIp = ""; 
    try 
    { 
     srUserIp = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString(); 
    } 
    catch 
    { 

    } 

Methode 2:

string srUserIp = ""; 
    try 
    { 
     srUserIp = Request.UserHostAddress.ToString(); 
    } 
    catch 
    { 

    } 
+0

diese werden nicht die gleichen Ergebnisse, wenn der Benutzer einen Proxy-Server hat, wird es? Methode 2 erhält die Adresse des Proxys anstelle des Computers des Benutzers. Ich werde nicht Methode 2 über Methode 1 verwenden. – lawphotog

+0

müssen nur wissen, wer das liest, das verursacht Probleme. also benutze ich nicht mehr. – MonsterMMORPG

+0

@MonsterMMORPG, welche der Methoden verursacht Probleme, und was sind die Probleme? –

Antwort

52

Kurze Antwort: Die beiden sind identisch.

Lange Antwort: Um den Unterschied zwischen den beiden zu bestimmen, Reflektor (oder einen anderen Disassembler) verwenden.

Der Code für die HttpRequest.UserHostAddress Eigenschaft folgt:

public string UserHostAddress 
{ 
    get 
    { 
     if (this._wr != null) 
     { 
      return this._wr.GetRemoteAddress(); 
     } 
     return null; 
    } 
} 

Beachten Sie, dass es _wr.GetRemoteAddress() zurückgibt. Die Variable _wr ist eine Instanz eines Objekts HttpWorkerRequest. Es gibt verschiedene Klassen, die von HttpWorkerRequest abgeleitet sind und welche davon verwendet wird, hängt davon ab, ob Sie IIS 6, IIS 7 oder höher und einige andere Faktoren verwenden, aber alle, die Sie in einer Webanwendung verwenden, haben denselben Code für GetRemoteAddress() nämlich:

public override string GetRemoteAddress() 
{ 
    return this.GetServerVariable("REMOTE_ADDR"); 
} 

Wie Sie sehen können, gibt GetRemoteAddress() einfach den Server-Variable REMOTE_ADDR.

Soweit was zu verwenden, würde ich vorschlagen, die UserHostAddress Eigenschaft, da ist nicht auf "Magic Strings."

Glücklich Programmierung

5

Es gibt keinen Unterschied. Sie geben genau den gleichen Wert zurück. Eins ist jedoch IntelliSense-freundlich, das andere nicht.

Verwandte Themen