Question: Here I can use either of these 2 methods. What are the differences and which one should I use?

**Method 1:**

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

    }

```

**Method 2:**

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

    }

```

Answer: 
**Short answer:** The two are identical. 

**Long answer:** To determine the difference between the two use Reflector (or whatever disassembler you prefer).

The code for the `HttpRequest.UserHostAddress` property follows:

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

```

Note that it returns `_wr.GetRemoteAddress()`. The `_wr` variable is an instance of an `HttpWorkerRequest` object. There are different classes derived from `HttpWorkerRequest` and which one is used depends on whether you are using IIS 6, IIS 7 or beyond, and some other factors, but all of the ones you would be using in a web application have the same code for `GetRemoteAddress()`, namely:

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

```

As you can see, `GetRemoteAddress()` simply returns the server variable `REMOTE_ADDR`.

As far as which one to use, I'd suggest the `UserHostAddress` property since is doesn't rely on "magic strings."

Happy Programming
There is no difference. They return exactly the same value. However, one is IntelliSense-friendly whereas the other is not.