首页 新闻 会员 周边 捐助

api如何获取请求的ip地址

0
悬赏园豆:5 [已解决问题] 解决于 2018-11-23 11:27

就像在百度页面中敲入ip一样
我该怎么获取到请求的ip地址呢?
除了用访问网站的方法。。。

临冰听雪丶的主页 临冰听雪丶 | 初学一级 | 园豆:175
提问于:2018-11-22 18:34
< >
分享
最佳答案
0

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
var ip = Request.Host;
return new string[] { ip.Value };
}
}

收获园豆:5
chester·chen | 小虾三级 |园豆:507 | 2018-11-23 09:54

在.net core 里应该怎么用呢?
.net Core 没有 Request 的属性...

临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-23 10:04

@临冰听雪丶: 这个就是在.netcore2.1里的代码

chester·chen | 园豆:507 (小虾三级) | 2018-11-23 10:05

@临冰听雪丶: 或者试一下 HttpContext.Request.Host

chester·chen | 园豆:507 (小虾三级) | 2018-11-23 10:06

@老六代码: 类型“HttpContext”中不存在类型名“Request”
单独写也不行,我不知道是不是我少一个什么包。。。

临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-23 10:09

@临冰听雪丶: 你直接写 HttpContext.Request.Host 编译出错吗?有可能编译不出错,只是Vs提示有问题

chester·chen | 园豆:507 (小虾三级) | 2018-11-23 10:11

@临冰听雪丶: 不会少什么包的,这是HttpContext的一个属性

chester·chen | 园豆:507 (小虾三级) | 2018-11-23 10:12

@老六代码: 直接编译不通过

临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-23 10:14

@临冰听雪丶: 是.netcore的webapi还是其他的项目类型?

chester·chen | 园豆:507 (小虾三级) | 2018-11-23 10:15

@老六代码: .net core 的webapi

临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-23 10:20

@临冰听雪丶:在控制器里是可以直接获取到Request或者HttpContext.Request。你可以把代码贴出来

chester·chen | 园豆:507 (小虾三级) | 2018-11-23 10:23

@老六代码: 我加了一个
<code>
private IHttpContextAccessor _accessor;
</code>
然后单独写的时候,
<code>
var host = HttpContext.Request.Host;
</code>
它会报错
对象引用对于非静态的字段、方法或属性“HttpContext.Request”是必需的

临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-23 10:33

@老六代码: 在我没有加
<code>
private IHttpContextAccessor _accessor;
</code>
然后如果我这样写的话
<code>
var result = _accessor.HttpContext.Request.Host;
</code>
就直接给我返回了一个Html页面...

临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-23 10:35

@临冰听雪丶:

如果你是在startup里注入IHttpContextAccessor 的话,
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddMvc();
}
那么你可以这样获取
private IHttpContextAccessor _accessor;
public ValuesController(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
var ip = _accessor.HttpContext.Request.Host.Value;
return new string[] { ip };
}

chester·chen | 园豆:507 (小虾三级) | 2018-11-23 10:42

@老六代码: 本地的可以获取到了,等可以发布到服务器上的时候再试试,谢谢您啦~

临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-23 11:27

@临冰听雪丶: 可以就好 微软大法好

chester·chen | 园豆:507 (小虾三级) | 2018-11-23 11:32

@老六代码: 今天发布上去了依然不行,获取到的值是 导航栏里的值。。

临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-26 16:11

@临冰听雪丶: 你不是要获取地址栏的地址吗

chester·chen | 园豆:507 (小虾三级) | 2018-11-26 16:12

@临冰听雪丶: 服务器地址获取方法
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
var ip = HttpContext.Connection.LocalIpAddress;
var port = HttpContext.Connection.LocalPort;
return new string[] { ip.ToString(), port.ToString() };
}

chester·chen | 园豆:507 (小虾三级) | 2018-11-26 16:14

@老六代码: 用 RemoteIpAddress 取到了
LocalIpAddress 取到的好像是主机的地址 127.0.0.1
嘿嘿,谢谢您啦~

临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-26 16:31
其他回答(3)
0

没懂你的意思,你是服务端,想知道访问的来源IP么?有函数直接可以取呀

rqx | 园豆:468 (菜鸟二级) | 2018-11-22 22:46

我是服务端的api,但是用的是.net core
不知道函数时什么,百度没找到。。。
大神你知道嘛。。。

支持(0) 反对(0) 临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-23 10:05

string userHostAddress = HttpContext.Current.Request.UserHostAddress;

if (string.IsNullOrEmpty(userHostAddress))
{
userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}

支持(0) 反对(0) rqx | 园豆:468 (菜鸟二级) | 2018-11-23 10:09

@rqx: “HttpContext”未包含“Current”的定义
HttpContext 来自于 Microsoft.AspNetCore.Http
不知道是不是因为我少了什么包。。

支持(0) 反对(0) 临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-23 10:12
0

client 获取服务端的ip地址:可以直接ping域名得到ip,可以api请求从response里面获得ip;
server获取client的ip地址:request对象有remote host,x-forwarded-for代理地址等。可以百度一下

czd890 | 园豆:14488 (专家六级) | 2018-11-22 23:41

恩恩,我找找,谢谢~

支持(0) 反对(0) 临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-23 10:05
0
getRemoteAddr()

另外推荐一个ip地址定位库ip2region

ycyzharry | 园豆:25683 (高人七级) | 2018-11-23 09:30

恩恩,我研究一下试试,谢谢~

支持(0) 反对(0) 临冰听雪丶 | 园豆:175 (初学一级) | 2018-11-23 10:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册