You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.NET Core 2+C#内部API获取调用方电脑及用户信息?

获取.NET Core 2内部API调用方的用户/设备信息

好问题!针对你用.NET Core 2开发内部API的场景,获取调用方的Windows用户信息或者IP地址都是可行的,下面分情况给你详细说明:

一、获取发起调用的Windows用户信息

这在内部域环境下是完全可以实现的,核心是依赖Windows身份验证,具体步骤如下:

  1. 配置API的身份验证
    在Startup.cs的ConfigureServices方法中添加Windows身份验证服务:

    services.AddAuthentication(IISDefaults.AuthenticationScheme);
    

    然后在Configure方法中启用身份验证中间件(要放在UseMvc之前):

    app.UseAuthentication();
    app.UseMvc();
    
  2. 确保部署环境启用Windows身份验证
    如果你的API部署在IIS上,需要在IIS站点的“身份验证”设置中,禁用匿名身份验证,启用Windows身份验证。

  3. 在控制器中获取用户信息
    配置完成后,在API控制器的方法中,就可以通过User.Identity获取调用方的Windows用户信息了:

    [Authorize]
    [HttpGet("user-info")]
    public IActionResult GetUserInfo()
    {
        var windowsUsername = User.Identity.Name; // 格式通常为:DOMAIN\Username
        return Ok(new { Username = windowsUsername });
    }
    
  4. 调用方的配合要求
    调用API的客户端(比如桌面应用、PowerShell脚本等)需要传递Windows凭据。例如用HttpClient调用时,要设置UseDefaultCredentials = true:

    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        client.UseDefaultCredentials = true; // 自动传递当前Windows用户凭据
        var response = await client.GetAsync("https://your-api-url/user-info");
    }
    

二、获取调用方的IP地址

如果无法获取Windows用户信息(比如不启用Windows身份验证),获取IP地址是更通用的方案,实现起来也很简单:

  1. 直接获取远程IP
    在控制器方法中,通过HttpContext.Connection.RemoteIpAddress获取:

    [HttpGet("client-ip")]
    public IActionResult GetClientIp()
    {
        var ipAddress = HttpContext.Connection.RemoteIpAddress?.ToString();
        return Ok(new { IpAddress = ipAddress });
    }
    
  2. 处理反向代理场景
    如果你的API前面有反向代理(比如Nginx、IIS ARR),上面的方法会拿到代理服务器的IP,而不是真实客户端IP。这时需要配置转发头:
    在Startup.cs的ConfigureServices中添加:

    services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        // 如果代理服务器是可信的,可以添加到AllowedHosts里,避免伪造头
        options.KnownProxies.Add(IPAddress.Parse("192.168.1.100")); // 替换为你的代理IP
    });
    

    然后在Configure方法中,先启用转发头中间件:

    app.UseForwardedHeaders();
    app.UseAuthentication();
    app.UseMvc();
    

    配置后,RemoteIpAddress就会拿到真实的客户端IP了。

总结

  • 获取Windows用户信息:可行,但需要配置Windows身份验证,且调用方处于同一域环境并传递凭据;
  • 获取IP地址:完全可行,无特殊环境要求,注意处理反向代理场景即可;
  • 不存在完全不可行的情况,根据你的内部环境选择合适的方案就好。

内容的提问来源于stack exchange,提问作者boilers222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:48:28