2012-12-21 29 views
36

Ở đây tôi có thể sử dụng một trong hai phương pháp này. Sự khác biệt và tôi nên sử dụng cái nào?Sự khác biệt giữa Request.UserHostAddress và Request.ServerVariables ["REMOTE_ADDR"] là gì. ToString()

Phương pháp 1:

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

    } 

Cách 2:

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

    } 
+0

chúng sẽ không tạo ra kết quả tương tự nếu người dùng có máy chủ proxy, đúng không? Phương pháp 2 sẽ nhận địa chỉ của proxy thay vì máy của người dùng. Tôi sẽ không sử dụng phương pháp 2 theo phương pháp 1. – lawphotog

+0

chỉ cần cho biết ai đang đọc điều này, điều này đang gây ra sự cố. vì vậy tôi không sử dụng nữa. – MonsterMMORPG

+0

@MonsterMMORPG, phương thức nào gây ra sự cố và sự cố là gì? –

Trả lời

52

Câu trả lời ngắn: Cả hai đều giống nhau.

Câu trả lời dài: Để xác định sự khác biệt giữa hai sử dụng Reflector (hoặc bất kỳ trình tháo rời nào bạn thích).

Mã cho HttpRequest.UserHostAddress tài sản sau:

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

Lưu ý rằng nó trả _wr.GetRemoteAddress(). Biến số _wr là một thể hiện của đối tượng HttpWorkerRequest. Có các lớp khác nhau bắt nguồn từ HttpWorkerRequest và lớp nào được sử dụng tùy thuộc vào việc bạn đang sử dụng IIS 6, IIS 7 trở lên và một số yếu tố khác, nhưng tất cả những yếu tố bạn sẽ sử dụng trong ứng dụng web có cùng mã cho GetRemoteAddress() , cụ thể là:

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

Như bạn thấy, GetRemoteAddress() chỉ đơn giản trả về biến máy chủ REMOTE_ADDR.

Theo như cách sử dụng, tôi khuyên bạn nên sử dụng thuộc tính UserHostAddress vì không dựa vào "chuỗi ma thuật".

Lập trình hạnh phúc

5

Không có sự khác biệt. Chúng trả lại chính xác cùng một giá trị. Tuy nhiên, một là IntelliSense thân thiện trong khi khác là không.

Các vấn đề liên quan