隨着ASP.NET的發展,有不同的方式從請求中訪問客戶端IP地址。WebForms和MVC Web應用程序只是訪問當前HTTP上下文的請求。
var ip = HttpContext.Current.Request.UserHostAddress;
或者只是直接引用當前的Request
var ip = Request.UserHostAddress;
但是,這在ASP.NET Core 2.0及更高版本中不起作用。您必須從ConfigureServices方法中的Startup.cs類中注入 HttpContextAccessor實例。
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddSingleton <IHttpContextAccessor,HttpContextAccessor>(); }
現在我們需要在我們的控制器構造函數中使用它並將其分配給控制器級別聲明的變量。這樣,它可以從控制器中的所有Actions訪問。
[Route("api/[controller]")] [ApiController] public class IPAddressController : ControllerBase { private readonly IHttpContextAccessor httpContextAccessor; public IPAddressController(IHttpContextAccessor httpContextAccessor) { this.httpContextAccessor = httpContextAccessor; } [HttpGet] public IActionResult Get() { return Content(this.httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString()); } }