[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 };
}
}
在.net core 里应该怎么用呢?
.net Core 没有 Request 的属性...
@临冰听雪丶: 这个就是在.netcore2.1里的代码
@临冰听雪丶: 或者试一下 HttpContext.Request.Host
@老六代码: 类型“HttpContext”中不存在类型名“Request”
单独写也不行,我不知道是不是我少一个什么包。。。
@临冰听雪丶: 你直接写 HttpContext.Request.Host 编译出错吗?有可能编译不出错,只是Vs提示有问题
@临冰听雪丶: 不会少什么包的,这是HttpContext的一个属性
@老六代码: 直接编译不通过
@临冰听雪丶: 是.netcore的webapi还是其他的项目类型?
@老六代码: .net core 的webapi
@临冰听雪丶:在控制器里是可以直接获取到Request或者HttpContext.Request。你可以把代码贴出来
@老六代码: 我加了一个
<code>
private IHttpContextAccessor _accessor;
</code>
然后单独写的时候,
<code>
var host = HttpContext.Request.Host;
</code>
它会报错
对象引用对于非静态的字段、方法或属性“HttpContext.Request”是必需的
@老六代码: 在我没有加
<code>
private IHttpContextAccessor _accessor;
</code>
然后如果我这样写的话
<code>
var result = _accessor.HttpContext.Request.Host;
</code>
就直接给我返回了一个Html页面...
@临冰听雪丶:
如果你是在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 };
}
@老六代码: 本地的可以获取到了,等可以发布到服务器上的时候再试试,谢谢您啦~
@临冰听雪丶: 可以就好 微软大法好
@老六代码: 今天发布上去了依然不行,获取到的值是 导航栏里的值。。
@临冰听雪丶: 你不是要获取地址栏的地址吗
@临冰听雪丶: 服务器地址获取方法
// 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() };
}
@老六代码: 用 RemoteIpAddress 取到了
LocalIpAddress 取到的好像是主机的地址 127.0.0.1
嘿嘿,谢谢您啦~
没懂你的意思,你是服务端,想知道访问的来源IP么?有函数直接可以取呀
我是服务端的api,但是用的是.net core
不知道函数时什么,百度没找到。。。
大神你知道嘛。。。
string userHostAddress = HttpContext.Current.Request.UserHostAddress;
if (string.IsNullOrEmpty(userHostAddress))
{
userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
@rqx: “HttpContext”未包含“Current”的定义
HttpContext 来自于 Microsoft.AspNetCore.Http
不知道是不是因为我少了什么包。。
client 获取服务端的ip地址:可以直接ping域名得到ip,可以api请求从response里面获得ip;
server获取client的ip地址:request对象有remote host,x-forwarded-for代理地址等。可以百度一下
恩恩,我找找,谢谢~