C# 监听http请求

2023-11-18

直接上代码:

  public partial class FrmHome : Form
    {

        
        HttpListener verifyHttplisten;
        private object listenLocker = new object();
        Thread ThrednHttpPostRequest;


        public FrmHome()
        {
            InitializeComponent();
        }

        private void FrmHome_Load(object sender, EventArgs e)
        {
            try
            {
                //启动HTTP监听
                verifyHttplisten = new HttpListener();
                verifyHttplisten.Prefixes.Add("http://192.168.1.199/");
                verifyHttplisten.Start();
                ThrednHttpPostRequest = new Thread(new ThreadStart(httpPostRequestHandle));
                ThrednHttpPostRequest.IsBackground = true;
                ThrednHttpPostRequest.Start();
            }
            catch(Exception ex)
            {
                //LogHelper.CreateErrorLogTxt("FrmHome_Load",ex.Source,ex.Message);
            }
        }
        
       
        /// <summary>
        /// 等待请求的线程函数
        /// </summary>
        private void httpPostRequestHandle()
        {
            while (true)
            {
                try
                {
                    //等待请求连接,没有请求则GetContext处于阻塞状态
                    HttpListenerContext requestContext = verifyHttplisten.GetContext();
                    Thread m_threadsub = new Thread(new ParameterizedThreadStart((requestcontext) =>
                    {
                        try
                        {
                            lock (listenLocker)
                            {
                                ResponseEntity<Hashtable> result = new ResponseEntity<Hashtable>();
                                RequstEntity requstEntity = new RequstEntity();
                                //客户端发送过来的信息
                                HttpListenerContext request = (HttpListenerContext)requestcontext;
                                //获取HTTPRequest的帮助类
                                HttpListenerHelper httppost = new HttpListenerHelper(request);
                                //获取HTTPRequestbody,RequstEntity定义的一个类,用来接收解析接收到的json数据
                                requstEntity = httppost.GetHttpListenerPostValue<RequstEntity>();

                                switch (request.Request.HttpMethod)
                                {
                                    case "POST":
                                        if (request.Request.RawUrl == "/api/v1/Face/FaceSearch")
                                        {
                                            //这里写接收到请求的处理函数
                                        }
                                        break;
                                    case "PUT":
                                        if (request.Request.RawUrl == "/api/v1/Face/FaceAdd")
                                        {
                                             //这里写接收到请求的处理函数
                                        }
                                        break;
                                    case "GET":
                                        if (request.Request.RawUrl == "/api/v1/Face/GetCount")
                                        {
                                            //这里写接收到请求的处理函数
                                        }
                                        break;
                                    case "DELETE":
                                        Regex urlMach = new Regex("/api/v1/Face/FaceDel");
                                        if (urlMach.IsMatch(request.Request.RawUrl))
                                        {
                                             //这里写接收到请求的处理函数
                                        }
                                        break;
                                }

                                //Response  
                                request.Response.StatusCode = 200;
                                request.Response.Headers.Add("Access-Control-Allow-Origin", "*");
                                request.Response.ContentType = "application/json";
                                request.Response.ContentEncoding = Encoding.UTF8;
                                byte[] buffer = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(result));
                                request.Response.ContentLength64 = buffer.Length;
                                var output = request.Response.OutputStream;
                                output.Write(buffer, 0, buffer.Length);
                                output.Close();
                            }
                        }
                        catch (Exception ex)
                        {
                            //LogHelper.CreateErrorLogTxt("verifyhttplistern", ex.Source.ToString(), ex.Message);
                        }
                    }));
                    m_threadsub.IsBackground = true;
                    m_threadsub.Start(requestContext);
                }
                catch (Exception ex)
                {
                    //LogHelper.CreateErrorLogTxt("httpRequestHandle", ex.Source, ex.Message);
                }
            }
        }
    }
}

解析http请求Request Body:

namespace Falcon.Utils
{
    

    /// <summary>  
    /// 获取http请求中的参数和值帮助类  
    /// </summary>  
    public class HttpListenerHelper
    {
        private HttpListenerContext request;

        public HttpListenerHelper(HttpListenerContext request)
        {
            this.request = request;
        }

        

        
        /// <summary>
        /// 获取httprequestbody过来的参数和数据 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public T GetHttpListenerPostValue<T>()
        {
            try
            {
                T response= default(T);
                if (request.Request.ContentType.StartsWith("application/json"))
                {
                    using (Stream inputStream = request.Request.InputStream)
                    {
                        using (StreamReader reader = new StreamReader(inputStream))
                        {
                            string json = reader.ReadToEnd();
                            response = JsonConvert.DeserializeObject<T>(json);
                        }
                    }
                }
                return response;
            }
            catch(Exception ex)
            {
               // LogHelper.CreateErrorLogTxt("GetHttpListenerPostValue", ex.Source.ToString(), ex.Message);
                return default(T);
            }
        }
   }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 监听http请求 的相关文章

  • 为什么相同的代码在同一台计算机上的执行时间可能不同?

    我是 C 编程新手 我编写了代码并希望获得它的运行时 这就是我所做的 每次运行代码时 我都会得到不同的运行时值 这样对吗 或者我的代码有问题吗 int main int argc char argv time t start end sta
  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 本土化的ChromeOS-系统推荐

    系统推荐 今天推荐一个本土化的ChromeOS 可以安装安卓软件和Play商店的软件 不需要拥有谷歌账号即可使用 只需要创建fydeOS的账号就可以了 相比起其它的第三方ChromeOS操作系统 它开放的东西更多 官方也有适配一些第三方设备
  • STM32速成笔记—Flash闪存

    文章目录 一 Flash简介 二 STM32F1的Flash 三 Flash操作步骤 四 程序设计 4 1 读取数据 4 2 写入数据 不检查 4 3 写入数据 检查 五 注意事项 一 Flash简介 快闪存储器 flash memory
  • 2023前端面试题及答案整理(JS面试题)

    ES6 let const 全局作用域中 用 const 和 let 声明的变量不在 window 上 那到底在哪里 如何去获取 ES6规定 var 命令和 function 命令声明的全局变量 依旧是顶层对象的属性 但 let const
  • Python数据结构与算法分析 第五章 搜索和排序

    有序列表的顺序搜索 二分查找 二分搜索 sou 17 18 22 28 38 78 89 99 100 def binarysearch list item first 0 last len list 1 while first lt la
  • linux环境下网卡重启

    网卡重启命令 sudo service network restart 但在有的linux版本中会出现network unrecognized service 我们可以换个网络重启命令就可以了 sudo service network ma
  • 100天精通Python(基础篇)——第5天:基础语句

    作者介绍 Python领域优质创作者 数据开发工程师 励志成为Python全栈工程师 关注我发现更多精彩 本文已收录于Python全栈系列专栏 100天精通Python从入门到就业 欢迎订阅 订阅后可私聊进Python全栈VIP交流群 手把
  • 激发创造力!如何轻松录制PPT和人像视频

    大家好 作为一个追求创意的人 你是否曾经遇到过想要一边讲PPT一边录制视频 或者同时录制PPT和人像的困扰 别担心 我来给你分享一些简单而有趣的方法 首先 我们可以利用PPT自带的屏幕录制功能来实现一边讲PPT一边录制视频的需求 只需点击
  • Python运算符列表

    Python运算符列表 运算符 描述 x y x y 加 减 号可重载为连接符 x y x y x y x y 相乘 求平方 相除 求余 号可重载为重复 号可重载为格式化 lt lt gt gt lt gt 比较运算符 lt lt gt g
  • 亚马逊秋季促销指南——如何更好的利用促销?

    最新消息 亚马逊官方宣布将会在10月份举行Prime会员大促 覆盖多个站点 亚马逊卖家们一定要抓住这波促销机会 在这个秋季再冲一把 但是还有一些小白玩家可能对于亚马逊促销了解不够 那么接下来我要讲的这些准备工作 你要看完哦 一 促销工具 首
  • TensorFlow的随机张量(Random Tensors)

    随机张量 Random Tensors TensorFlow有几种操作可以创建具有不同分布的随机张量 随机操作是有状态的 每次评估时都会创建新的随机值 与变量不同 随机张量在运行前不再需要显式初始化 tf random normal tf
  • flink-connector-jdbc_2.12 简介、中文文档、中英对照文档 下载

    flink connector jdbc 2 12 文档 下载链接 含jar包 源码 pom 组件名称 中文 文档 下载链接 中英对照 文档 下载链接 flink connector jdbc 2 12 1 14 3 jar flink c
  • Oracle数据库管理-ORA-12542 TNS 地址已被占用

    今日客户数据库连接报错 在使用plsql进行数据库连接时出现如下报错信息 ORA 12542 TNS 地址已被占用 问题排查 1 使用其他服务器客户端连接数据库正常 2 只有这一台机器连接数据库异常 查询相关的metalink文档发现如下
  • 原生input实现上传文件以及文件夹

    最近接到了一个上传文件和文件夹的需求 考虑了一下打算用原生的input来实现上传文件 话不多说直接上代码 1 html部分
  • NLP之基于TextCNN的文本情感分类

    TextCNN 文章目录 TextCNN 1 理论 1 1 基础概念 最大汇聚 池化 层 请添加图片描述 https img blog csdnimg cn 10e6e1ed6bfd42f0bd46b658ed52ff50 png 1 2
  • 数据结构——堆(带图详解)

    目录 堆 堆的概念 堆的性质 堆的创建 1 堆向下调整 2 堆的创建 3 建堆的时间复杂度 堆的插入和删除 1 堆的插入 2 堆的删除 堆的应用 1 优先级队列的实现 2 堆排序 3 Top k问题 堆 Heap 堆的概念 前面介绍的优先级
  • 计算机应用基础的体会,学习计算机应用基础心得体会(3篇)【可编辑版】

    资料简介 学习计算机应用基础心得体会 3篇 可编辑版 计算机基础学习心得体会 1 众所周知 21 世纪是一个信息经济时代 为适应时代的发展 作为一名当代大学生 所受的社会压力将比任何时候的大学生都要来 得沉重 因此在校期间 我们必须尽可能的
  • 如何屏蔽某网站

    博主用电脑的时候用一会儿总是控制不住就刷起了知乎 然后在蹉跎中度过了美好的时光 于是决定屏蔽知乎等让我分心的网站 希望能够专注于眼前的事 此方法治标不治本 因为能屏蔽也能让它恢复 因此想要真正不分心还得提高自制力 我的思路是修改host文件
  • 网页一键生成app软件_工程人必须拥有的4个自动生成软件,操作简单,一键输入直接生成...

    工程人必须拥有的4个自动生成软件 操作简单 一键输入直接生成 还在为写技术交底而头疼吗 还在为经常熬夜而烦恼吗 还在为没有好的模板而郁闷吗 这些都是工程人的通病 作为工程人深有同感 如果有一个能一键操作 就能自动生成技术交底的软件 是不是很
  • 【华为OD机试真题2023B卷 JAVA&JS】宜居星球改造计划

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 宜居星球改造计划 知识点广搜 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 2XXX年 人类通过对火星的大气进行宜居改造分析 使得火星已在理论上具备人类宜居的条件 由于
  • C# 监听http请求

    直接上代码 public partial class FrmHome Form HttpListener verifyHttplisten private object listenLocker new object Thread Thre