隐藏

webapi获取IP的方式

发布:2022/10/19 16:43:44作者:管理员 来源:本站 浏览次数:623

using System.Net.Http;


public static class HttpRequestMessageExtensions

{

   private const string HttpContext = "MS_HttpContext";

   private const string RemoteEndpointMessage =

       "System.ServiceModel.Channels.RemoteEndpointMessageProperty";

   private const string OwinContext = "MS_OwinContext";


   public static string GetClientIpAddress(this HttpRequestMessage request)

   {

      // Web-hosting. Needs reference to System.Web.dll

      if (request.Properties.ContainsKey(HttpContext))

      {

          dynamic ctx = request.Properties[HttpContext];

          if (ctx != null)

          {

              return ctx.Request.UserHostAddress;

          }

      }


      // Self-hosting. Needs reference to System.ServiceModel.dll.

      if (request.Properties.ContainsKey(RemoteEndpointMessage))

      {

           dynamic remoteEndpoint = request.Properties[RemoteEndpointMessage];

           if (remoteEndpoint != null)

           {

               return remoteEndpoint.Address;

           }

       }


      // Self-hosting using Owin. Needs reference to Microsoft.Owin.dll.

      if (request.Properties.ContainsKey(OwinContext))

      {

          dynamic owinContext = request.Properties[OwinContext];

          if (owinContext != null)

          {

              return owinContext.Request.RemoteIpAddress;

          }

      }


       return null;

   }

}


References required:


   HttpContextWrapper - System.Web.dll

   RemoteEndpointMessageProperty - System.ServiceModel.dll

   OwinContext - Microsoft.Owin.dll (you will have it already if you use Owin package)



第二种:

((System.Web.HttpContextWrapper)Request.Properties["MS_HttpContext"]).Request.UserHostAddress;