在SelfHost项目中获取客户端IP地址
在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地址的更多相关文章
- 在ASP.NET Core中获取客户端IP地址
随着ASP.NET的发展,有不同的方式从请求中访问客户端IP地址.WebForms和MVC Web应用程序只是访问当前HTTP上下文的请求. var ip = HttpContext.Current. ...
- 在ASP.NET Core 2.x中获取客户端IP地址
一.前言 大家也知道服务端请求时我们获取的IP地址是包含在请求头中,因此这也大大便利了IP的获取. 在ASP.NET中,可以通过以下方式获取客户端的IP地址. HttpContext.Current. ...
- 再论 ASP.NET 中获取客户端IP地址
说到IP获取无非是我们常见的以下几种方式,但是具体获取的值具体区别在哪?网上不乏相关文章,说的也是很详细,但是真正使用起来,还有很多不太对的地方.IP在不同系统中,应用相当广泛,常见的日志记录.广告分 ...
- vue中获取客户端IP地址(不需要额外引入三方文件)
之前看了几种方法 ,都是引入腾讯,新浪,搜狐等的三方js文件来查询IP地址,但是我自己测试的时候IP地址不准确,所以就找了找,发现了这个方法,准确的获取到了IP地址和cmd的ipconfig获取到的I ...
- 集群环境下JSP中获取客户端IP地址的方法
String ip = request.getHeader("X-Forwarded-For");if (ip == null || ip.length() == 0 || &qu ...
- (转)【ASP.NET开发】获取客户端IP地址 via C#
[ASP.NET开发]获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己 ...
- 获取客户端IP地址 via C#
获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己在项目中做过的事情,同 ...
- 在Thinkphp3.2.3框架下实现自动获取客户端IP地址的get_client_ip()函数
在Thinkphp框架下使用get_client_ip()函数获取客户端IP地址十分方便: 一行代码便可以实现:$ip = get_client_ip(); 但当我们测试时会遇到后台获取的IP地址显示 ...
- JAVA获取客户端IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- C# WebApi 获取客户端ip地址
转自:http://www.cnblogs.com/weixing/p/5674078.html References required: HttpContextWrapper - System.We ...
随机推荐
- CMake快速入门教程
前言 Make工具因遵循不同的规范和标准,执行的Makefile的格式也是不同.主流的Make工具包括: GNU Make QT的qmake 微软的 MS nmake BSD的 pmake 每个平台都 ...
- C语言:如何删除在可视化网页中未可见的内容(网页txt)
我这个代码仅仅限制于在chrome浏览器中下载china daliy的网页中实现删除可视化内容,因为每个网页的超链接或者文本主内容分布不一样,但是学会了删除一个网页类型的不可视化内容之后,修改其他网页 ...
- CMD文件内容统计程序简单版本
WordCount命令行程序通过CMD接收参数,输出统计结果到指定文件. 项目码云地址:https://gitee.com/ggtc/WordCount.git 实现的功能有: 统计文件字符数 1 u ...
- 『手撕Vue-CLI』添加终端用户交互
前言 经过上一篇文章的梳理,实现了可以从 GitHub 上拉取模板项目名称,已经可以得知可使用的模板有哪些了,那么我觉得是不是要进行选择呢?所以这一篇文章就来实现终端用户交互,让用户可以自己选择想要使 ...
- 根据raft协议动画总结raft协议的特点
raft动画地址 1. 1事务提交的时候如果已经被一台follower(A)获取到了,此时leader(L)挂掉,然后其它follower跟A一起选举leader基本上都是A会被选举成功,然后不管1事 ...
- nginx四层负载nginx七层负载,nginx基于nginx-sticky会话保持.
1. nginx负载均衡实战 nginx提供了 4 7层负载均衡. 可根据业务需求选择不同负载均衡策略. 1.1.1 nginx四层负载均衡[网络层TCP负载] 不支持动静分离,但支持 http my ...
- wireshark常见使用技巧
(1)wireshark根据报文不同字段排序 举例说明:现在有50000个1588 sync报文,我想根据报文的originalTimestamp(seconds)字段进行排序,该如何操作呢? 操作过 ...
- Linux 提权-Cron Jobs
本文通过 Google 翻译 Cron Jobs – Linux Privilege Escalation - Juggernaut-Sec 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行 ...
- 工作中常用Less知识点实践总结
我所理解的Less的一些好处 函数式编程css 自定义变量用于整体主题调整 嵌套语法简化开发复杂度 mixin的写法 .defaultBorder(@width: 10px, @style: soli ...
- 小程序的文件结构及配置 小程序配置 app.json
程序包含一个描述整体程序的 app 和多个描述各自页面的 page. 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 文件 必填 作用 app.js 是 小程序逻辑-小程序入口文件 a ...