HttpContextAccessor无法在Asp.Net Core 2中检索属性值

时间:2018-04-05 12:16:12

标签: c# asp.net-core httpcontext

我正在尝试在注册页面上检索注册人的远程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

任何帮助都会理解为什么会发生此错误。

1 个答案:

答案 0 :(得分:0)

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

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