我需要一个非常简单的东西——在 Web API 控制器中获取远程主机 IP 地址。这篇文章描述了当您是网络托管或自托管时如何执行此操作。不幸的是,所描述的解决方案不适用于使用 Owin 自托管的 Web API(好吧,我无法使其工作:))。我使用 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 );
}
谢谢!