【问题标题】:Get Remote Host IP in Web API Self-Hosted Using Owin在使用 Owin 自托管的 Web API 中获取远程主机 IP
【发布时间】:2013-11-19 19:30:48
【问题描述】:

我需要一个非常简单的东西——在 Web API 控制器中获取远程主机 IP 地址。 This 帖子描述了当您是网络托管或自托管时如何执行此操作。不幸的是,所描述的解决方案不适用于Web API self-hosted using Owin(好吧,我无法让它工作:))。我使用 Windows 服务来托管 Web API。

所以,问题是:如何使用 Owin 在 Windows 服务中自托管的 Web API 控制器中获取远程主机 IP 地址

我需要远程 IP 地址的控制器:

internal class ItemController : ApiController
{
    [HttpPost]
    public HttpResponseMessage AddItem([FromBody] string data)
    {
        // Need to get remote host IP address here

        return Request.CreateResponse(HttpStatusCode.OK);
    }
}

启动配置 Web API 的类:

internal class StartUp
{
    public void Configuration(IAppBuilder appBuilder)
    {
        var httpConfig = new HttpConfiguration();

        httpConfig.Routes.MapHttpRoute(
            name: "Default",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        appBuilder.UseWebApi(httpConfig);
    }
}

我使用 Windows 服务来托管 Web API。下面是服务的 OnStart 方法:

    protected override void OnStart(string[] args)
    {
        var baseAddress = "http://localhost:5550/";
        // Start OWIN
        WebApp.Start<StartUp>( url: baseAddress );            
    }

谢谢!

【问题讨论】:

    标签: c# asp.net-web-api windows-services ip-address owin


    【解决方案1】:

    您应该能够通过执行以下操作来获得它:

    OwinContext owinContext = (OwinContext)webapiHttpRequestMessage.Properties["MS_OwinContext"];
    string ipaddress = owinContext.Request.RemoteIpAddress;
    

    【讨论】:

    • 太好了,谢谢!我正在研究 OwinContext.Environment。
    【解决方案2】:

    这是我在 Owin 控制器 (System.Web.Http.Owin v5.2.7) 中的操作方式:

        var ctx = Request.Properties["MS_OwinContext"] as OwinContext;
        if (ctx != null)
        {
            var ip = ctx.Request.RemoteIpAddress;
            var port = ctx.Request.RemotePort;
            LogInfo($"Remote caller = {ip}:{port}");
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-24
      • 2015-01-09
      • 2016-12-15
      • 2014-02-21
      • 2016-07-07
      • 2015-04-13
      • 1970-01-01
      • 2017-08-06
      相关资源
      最近更新 更多