在SelfHost项目中,获取客户端的IP地址比OwinSelfHost项目要复杂一些,可以通过以下方法获得:

  • base.Request.Properties["System.ServiceModel.Channels.RemoteEndpointMessageProperty"].Address

创建一个SelfHost项目的大概过程:

  • 创建名称为SelfHostSample的Windows窗体应用(.NET Framework)项目;
  • 重命名Form1为MainForm;
  • 在NuGet包管理器中添加中添加Microsoft.AspNet.WebApi.SelfHost(注意是SelfHost,而不是OwinSelfHost);
  • 添加控制器类MainController。

各个类的代码如下:

  • Program
 1 using System;
2 using System.Windows.Forms;
3
4 namespace SelfHostSample
5 {
6 internal static class Program
7 {
8 [STAThread]
9 static void Main()
10 {
11 Application.EnableVisualStyles();
12 Application.SetCompatibleTextRenderingDefault(false);
13 Application.Run(new MainForm());
14 }
15 }
16 }
  • MainController
 1 using System.ServiceModel.Channels;
2 using System.Web;
3 using System.Web.Http;
4
5 namespace SelfHostSample
6 {
7 public class MainController : ApiController
8 {
9 [HttpGet, HttpPost]
10 public IHttpActionResult GetClientIp()
11 {
12 var result = string.Empty;
13
14 if (base.Request.Properties.TryGetValue("MS_HttpContext", out var value1))
15 {
16 result = ((HttpContextWrapper)value1).Request.UserHostAddress;
17 }
18
19 if (base.Request.Properties.TryGetValue(RemoteEndpointMessageProperty.Name, out var value2))
20 {
21 result = ((RemoteEndpointMessageProperty)value2).Address;
22 }
23
24 return Ok(result);
25 }
26 }
27 }
  • MainForm
 1 using System;
2 using System.Net.Http.Formatting;
3 using System.Web.Http;
4 using System.Web.Http.SelfHost;
5 using System.Windows.Forms;
6
7 namespace SelfHostSample
8 {
9 internal partial class MainForm : Form
10 {
11 public MainForm()
12 {
13 this.InitializeComponent();
14 }
15
16 private void button1_Click(object sender, EventArgs e)
17 {
18 var config = new HttpSelfHostConfiguration("http://127.0.0.1:8090/");
19 config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional });
20 config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(new JsonMediaTypeFormatter()));
21
22 var server = new HttpSelfHostServer(config);
23 server.OpenAsync().Wait();
24
25 this.button1.Enabled = false;
26 }
27 }
28 }
  • packages.config
 1 <?xml version="1.0" encoding="utf-8"?>
2 <packages>
3 <package id="Microsoft.AspNet.WebApi.Client" version="6.0.0" targetFramework="net48" />
4 <package id="Microsoft.AspNet.WebApi.Client.zh-Hans" version="6.0.0" targetFramework="net48" />
5 <package id="Microsoft.AspNet.WebApi.Core" version="5.3.0" targetFramework="net48" />
6 <package id="Microsoft.AspNet.WebApi.Core.zh-Hans" version="5.3.0" targetFramework="net48" />
7 <package id="Microsoft.AspNet.WebApi.SelfHost" version="5.3.0" targetFramework="net48" />
8 <package id="Microsoft.AspNet.WebApi.SelfHost.zh-Hans" version="5.3.0" targetFramework="net48" />
9 <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" />
10 <package id="Newtonsoft.Json.Bson" version="1.0.2" targetFramework="net48" />
11 <package id="System.Buffers" version="4.5.1" targetFramework="net48" />
12 <package id="System.Memory" version="4.5.5" targetFramework="net48" />
13 <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
14 <package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
15 <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
16 </packages>

在SelfHost项目中获取客户端IP地址的更多相关文章

  1. 在ASP.NET Core中获取客户端IP地址

    随着ASP.NET的发展,有不同的方式从请求中访问客户端IP地址.WebForms和MVC Web应用程序只是访问当前HTTP上下文的请求. var ip = HttpContext.Current. ...

  2. 在ASP.NET Core 2.x中获取客户端IP地址

    一.前言 大家也知道服务端请求时我们获取的IP地址是包含在请求头中,因此这也大大便利了IP的获取. 在ASP.NET中,可以通过以下方式获取客户端的IP地址. HttpContext.Current. ...

  3. 再论 ASP.NET 中获取客户端IP地址

    说到IP获取无非是我们常见的以下几种方式,但是具体获取的值具体区别在哪?网上不乏相关文章,说的也是很详细,但是真正使用起来,还有很多不太对的地方.IP在不同系统中,应用相当广泛,常见的日志记录.广告分 ...

  4. vue中获取客户端IP地址(不需要额外引入三方文件)

    之前看了几种方法 ,都是引入腾讯,新浪,搜狐等的三方js文件来查询IP地址,但是我自己测试的时候IP地址不准确,所以就找了找,发现了这个方法,准确的获取到了IP地址和cmd的ipconfig获取到的I ...

  5. 集群环境下JSP中获取客户端IP地址的方法

    String ip = request.getHeader("X-Forwarded-For");if (ip == null || ip.length() == 0 || &qu ...

  6. (转)【ASP.NET开发】获取客户端IP地址 via C#

    [ASP.NET开发]获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己 ...

  7. 获取客户端IP地址 via C#

    获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己在项目中做过的事情,同 ...

  8. 在Thinkphp3.2.3框架下实现自动获取客户端IP地址的get_client_ip()函数

    在Thinkphp框架下使用get_client_ip()函数获取客户端IP地址十分方便: 一行代码便可以实现:$ip = get_client_ip(); 但当我们测试时会遇到后台获取的IP地址显示 ...

  9. JAVA获取客户端IP地址

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  10. C# WebApi 获取客户端ip地址

    转自:http://www.cnblogs.com/weixing/p/5674078.html References required: HttpContextWrapper - System.We ...

随机推荐

  1. C语言简答题

    C语言的历史: c语言是在20世纪70年代初美国贝尔实验室开发的一种高级编程语言,由B语言发展来,最初是为了Unix操作系统开发的.在80年代中期,由ISO和ANSI C对它进行了一系列的标准化, 9 ...

  2. ShareConnect即将寿终正寝 Splashtop远程桌面会是最好的替代品

    大家好,我是没有感情的翻译机器人,又见面了.同类产品ShareConnect即将退市,官方大大搞了个新闻稿.君叫臣翻,臣不得不翻.------没有感情的分割线------ShareConnect的使用 ...

  3. MSP 通过 Splashtop SOS 远程支持非托管设备

    RMM 是 MSP 的绝佳工具.它们使 MSP 可以通过集中控制台来管理其所有客户计算机,通常使他们能够远程访问任何计算机以提供远程支持. 但是,这样做的一个很大限制是--并非所有客户设备都在 MSP ...

  4. JDK源码阅读-------自学笔记(二十一)(java.util.ArrayList详细版集合类)

    一.前景提要 本人经历了IT行业的多种类型企业,外包/创业小公司/中型公司,一步步成长起来,现在可以给大家透露下为什么进大企业在IT行业是重要的: 在外包公司,你要做的就是对接别人写好的接口,然后按照 ...

  5. Windows 10 开启秒钟显示

    开始搜索运行 注册表管理器 regedit 定位路径到 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Adv ...

  6. Garnet:微软官方基于.NET开源的高性能分布式缓存存储数据库

    前言 前不久Redis宣布从 Redis 7.4 开始,将原先比较宽松的 BSD 源码使用协议修改为 RSALv2 和 SSPLv1 协议,该协议变化意味着Redis不再开源.今天给大家分享一款完全开 ...

  7. nginx 常见配置案例参考(优化)

    在NGINX中,可以通过配置文件和特定的指令来实现权限控制.以下是一些常见的权限控制方法: 使用deny指令: 在NGINX配置文件中,可以使用deny指令来拒绝特定IP地址或IP地址范围的访问.可以 ...

  8. Python:Python字符串中的r、u和转义字符

    Python中字符串前面我们经常看到加r(R)或u/(U)的前缀,而这两个符号是什么意思呢? 1.r(R) r意为raw,表示不包含转义字符的原生字符串.常见的转义字符包括下列几种: 转义字符 描述 ...

  9. Fluter 编译第一个iOS应用

    一.流程说明 1)fluter是一个跨平台UI库,可以一份界面代码在iOS和Android上面运行 2)在Mac上面安装Fluter的环境,相对比较简单,通过简单的命令行可以设置环境 3)可以使用特定 ...

  10. 【Java面试题-基础知识01】Java数据类型四连问?

    一.Java中的基础数据类型有哪些? Java中的基本数据类型包括: 1. byte:8位有符号整数,范围为-128到127.2. short:16位有符号整数,范围为-32768到32767.3. ...