在这里,我可以使用这两种方法中的任何一种.有什么不同之处,我应该使用哪一种?

Method 1:

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

    }

Method 2:

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

    }

推荐答案

Short answer:.这两样东西是一样的.

Long answer:使用反射器(或任何你喜欢的拆卸器)来确定两者之间的差异.

HttpRequest.UserHostAddress号房产的代码如下:

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

请注意,它返回_wr.GetRemoteAddress()._wr变量是HttpWorkerRequest对象的一个实例.从HttpWorkerRequest派生出不同的类,使用哪个类取决于您使用的是IIS 6、IIS 7还是更高版本,以及其他一些因素,但在web应用程序中使用的所有类都有相同的GetRemoteAddress()代码,即:

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

如您所见,GetRemoteAddress()只返回服务器变量REMOTE_ADDR.

至于使用哪一个,我建议使用UserHostAddress属性,因为它不依赖于"魔术字符串"

快乐编程

Asp.net相关问答推荐

如何在 ASP.NET WebForms 中实现 TDD

将 Global.asax 迁移到 Startup.cs

如何使用 SmtpClient.SendAsync 发送带有附件的邮箱?

如何通过 Asp.net 中的命令参数传递多个值?

由于缺少定义,在 .net Core 应用程序上构建失败

我需要更改什么以允许我的 IIS7 ASP.Net 3.5 应用程序创建事件源并将事件记录到 Windows EventLog?

我应该如何在类和应用层之间传递数据?

当用户使表单无效时单击取消按钮时,如何清除 MVC 客户端验证错误?

您如何以编程方式填写表格并发布网页?

Owin 中是否有来自 Global.asax 的 Application_End?

asp.net 有控制台日志(log)吗?

如何删除asp.net中的特定会话?

使用 Ninject OWIN 中间件在 OWIN 启动中注入 UserStore

如何从url中删除returnurl?

捕获的异常本身为 null !

如何将列表转换为数据表

盒式磁带包与 MVC4 包

将 HTML 字符串转换为图像

System.Web.Caching 还是 System.Runtime.Caching 更适合 .NET 4 Web 应用程序

在 ASP.NET 中使用 SecureString 有什么好处吗?