【问题标题】:HttpContextAccessor not retrieving property values in Asp.Net Core 2HttpContextAccessor 未在 Asp.Net Core 2 中检索属性值
【发布时间】:2018-04-05 12:16:12
【问题描述】:

我正在尝试在我的注册页面上检索注册者的远程 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.Net.Sockets.SocketException”类型的异常 long {System.Net.Sockets.SocketException} 消息“所引用的对象类型不支持尝试的操作”字符串

我没有在 Startup 中为 HttpContextAccessor 添加服务调用,因为在阅读它时,它是在 Core 2 中默认设置的。

更新: 我还尝试按照此博客文章的建议使用 X-Forwarded-For 中间件 X-Forwarded-For

但它仍然解析为 ::1 作为 IP 地址。很可能是因为该中间件不工作,Fiddler 没有在标题中显示 X-Forwarded-For

感谢任何关于为什么会发生此错误的帮助。

【问题讨论】:

标签: c# asp.net-core httpcontext


【解决方案1】:

您不需要将IHttpContextAccessor 注入控制器。相反,只需使用控制器的 Request.HttpContext 属性来返回执行请求的上下文:

public HomeController 
{
    [HttpGet]
    public string ActionMethod()
    {
        var address = this.Request.HttpContext.Connection.RemoteIpAddress;
    }
}

【讨论】:

  • @Set...这仍然返回相同的东西... {::1} System.Net.IPAddress...这显然不是IP地址。这与我使用 localhost 进行测试有关吗?
  • @dinotom 是的,检查stackoverflow.com/questions/6408957/…
  • @Set...我已经更改了主机文件。那也解决不了。这是一个套接字异常错误,这就是我的烦恼
猜你喜欢
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多