获取访问使用bot框架(使用c#)开发的我的bot的用户的ip地址

获取访问使用bot框架(使用c#)开发的我的bot的用户的ip地址,c#,asp.net,botframework,C#,Asp.net,Botframework,我想获取访问我的聊天机器人的用户的IP地址。我尝试了几个选项,但是我得到了我的bot所在服务器的IP地址。有什么方法可以获取用户的IP吗?请尝试下面的方法获取客户端计算机的IP地址 string VisitorsIPAddress = string.Empty; if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) { VisitorsIPAddres

我想获取访问我的聊天机器人的用户的IP地址。我尝试了几个选项,但是我得到了我的bot所在服务器的IP地址。有什么方法可以获取用户的IP吗?

请尝试下面的方法获取客户端计算机的IP地址

   string VisitorsIPAddress = string.Empty;
   if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
     {
        VisitorsIPAddress = 
      HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
     }
   else if (HttpContext.Current.Request.UserHostAddress.Length != 0)
     {
        VisitorsIPAddress = HttpContext.Current.Request.UserHostAddress;
     }
   else         
     {
         VisitorsIPAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
     }

请在下面尝试获取客户端计算机的IP地址

   string VisitorsIPAddress = string.Empty;
   if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
     {
        VisitorsIPAddress = 
      HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
     }
   else if (HttpContext.Current.Request.UserHostAddress.Length != 0)
     {
        VisitorsIPAddress = HttpContext.Current.Request.UserHostAddress;
     }
   else         
     {
         VisitorsIPAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
     }

无法使用默认方法
REMOTE\u ADDR
HTTP\u X\u FORWARDED\u FOR
检索用户IP地址,因为(Azure)机器人连接器服务介于两者之间。您没有与最终用户的直接连接,并且Bot Connector服务没有向用户传递公共ip地址

  • Microsoft团队根本不允许这样做,一种可能的解决方法是在弹出窗口/选项卡/浏览器中打开自定义网站,在其中记录当前用户的ip地址

  • 默认情况下,WebChat(使用DirectLine服务)不支持此功能,但您可以将ip地址作为自定义事件发送



我不明白你为什么需要用户的公共ip地址,除了身份验证。如果您需要它进行身份验证,我的选择是使用Azure Active Directory或其他身份提供程序实现身份验证

您无法使用默认方法
REMOTE\u ADDR
HTTP\u X\u FORWARDED\u FOR
检索用户IP地址,因为(Azure)机器人连接器服务介于两者之间。您没有与最终用户的直接连接,并且Bot Connector服务没有向用户传递公共ip地址

  • Microsoft团队根本不允许这样做,一种可能的解决方法是在弹出窗口/选项卡/浏览器中打开自定义网站,在其中记录当前用户的ip地址

  • 默认情况下,WebChat(使用DirectLine服务)不支持此功能,但您可以将ip地址作为自定义事件发送




我不明白你为什么需要用户的公共ip地址,除了身份验证。如果您需要它进行身份验证,我的选择是使用Azure Active Directory或其他身份提供程序实现身份验证

用户如何访问您的聊天机器人?您正在使用WebChat或其他频道。如果您使用的是WebChat,那么您使用的是iframe还是自托管实现。请检查HttpContext Request ServerVariables的IP地址Address@Mick我正在使用bot网络聊天和MSteams频道。我没有使用iframe,我正在使用azure内置的web聊天频道进行测试purposes@SonalBorkar我尝试了服务器变量,它返回::1作为输出。我使用ngrok公开并测试了我的bot端点。它仍然显示相同的1。@arun7即使您访问了服务器变量的哪个键?用户如何访问您的聊天机器人?您正在使用WebChat或其他频道。如果您使用的是WebChat,那么您使用的是iframe还是自托管实现。请检查HttpContext Request ServerVariables的IP地址Address@Mick我正在使用bot网络聊天和MSteams频道。我没有使用iframe,我正在使用azure内置的web聊天频道进行测试purposes@SonalBorkar我尝试了服务器变量,它返回::1作为输出。我使用ngrok公开并测试了我的bot端点。它仍然显示相同的1。@arun7即使您访问了服务器变量的哪个键?谢谢!!。。我要试试这个汉克!!。。我试试这个我也有这个需要。其目的是通过使用IP地理定位服务来识别用户位置,而无需询问。无法通过传递会话id调用Azure Bot服务以获取原始客户端IP?这适用于不能自定义通道以传递此数据的情况。@gonzaedu61不幸的是不能。在什么情况下你不能自定义频道?我还想得到用户的IP地址。因为另一个原因。我们想阻止恶意用户的IP地址。我们不想使用身份验证,因为我们的用户没有帐户。使用directline反向通道对我们不起作用,因为恶意用户可以编辑前端代码来发送假IP。我想用C#BotController或TokenController来查找用户IP并将其连接到用户id。可以这样做吗?我也有这种需要。其目的是通过使用IP地理定位服务来识别用户位置,而无需询问。无法通过传递会话id调用Azure Bot服务以获取原始客户端IP?这适用于不能自定义通道以传递此数据的情况。@gonzaedu61不幸的是不能。在什么情况下你不能自定义频道?我还想得到用户的IP地址。因为另一个原因。我们想阻止恶意用户的IP地址。我们不想使用身份验证,因为我们的用户没有帐户。使用directline反向通道对我们不起作用,因为恶意用户可以编辑前端代码来发送假IP。我想使用C#BotController或TokenController来查找用户IP并将其连接到用户id。这可以做到吗?