我正在尝试在注册页面上检索注册人的远程IP地址。
为了进行测试,我正在使用测试应用。 在控制器中;
private readonly IConfiguration _config;
private IHttpContextAccessor _accessor;
public HomeController(IConfiguration config, IHttpContextAccessor accessor)
{
_config = config;
_accessor = accessor;
}
并在动作结果中
var ipAddress = _accessor.HttpContext.Connection.RemoteIpAddress;
该代码错误地显示错误消息
- 地址' ipAddress.Address'抛出了类型&System; System.SNet.Sockets.SocketException' long {System.Net.Sockets.SocketException} 消息"引用的对象类型不支持尝试的操作"串
我没有在Startup中为HttpContextAccessor添加服务调用,因为在阅读它时,它默认设置在Core 2中。
更新: 我也试过使用这个博客帖子建议的X-Forwarded-For中间件 X-Forwarded-For
但它仍然解析为:: 1作为IP地址。很可能因为中间件不起作用,Fiddler没有在标题中显示X-Forwarded-For
任何帮助都会理解为什么会发生此错误。
答案 0 :(得分:0)
您无需将IHttpContextAccessor
注入控制器。相反,只需使用控制器的Request.HttpContext
属性来返回执行请求的上下文:
public HomeController
{
[HttpGet]
public string ActionMethod()
{
var address = this.Request.HttpContext.Connection.RemoteIpAddress;
}
}